0

以下のクエリは機能しますが、where句の「o.opendateはnullではなくo.orderdateはnullではなくo.closedateはnullでo.canceldateはnullです」の部分はorderIDカウント(orderCount)にのみ適用する必要があります。現在、それは結果セット全体に適用されており、それは私が望んでいることではありません。これを行うためにクエリを変更するにはどうすればよいですか?また、これらのテーブルは非常に大きいため、パフォーマンス上の理由から、インデックスに大きく依存し、サブクエリを使用しないようにしています。どんな助けでもいただければ幸いです

select s.ZipCode, count(o.[OrderID]) orderCount, b.Longitude, b.Latitude, b.ordering 
from ZipCodeServiceAvailability s  
left join pdx_orders_view o on s.ZipCode = left(o.[ZipCode], 5)  
left join ZipCodeBoundaries b on s.ZipCode = b.ZipCode  
Where s.state = 'TX' and Ordering % 10 = 0 and 
     o.opendate is not null and o.orderdate is not null and o.closedate is null and o.canceldate is null  
Group By s.ZipCode, IsServiced, b.Longitude, b.Latitude, b.Ordering  
Order by s.ZipCode, b.Ordering
4

2 に答える 2

3

SUMを含むcaseステートメントが必要です。

select sum(case when o.opendate is not null and o.orderdate is not null and o.closedate is null and o.canceldate is null
             then 1 else 0
        end) as OrderCount

where次に、句から条件を削除する必要があります。

于 2013-02-22T16:14:04.917 に答える
1

あなたはhaving節であなたがやりたいことをすることができます。

select s.ZipCode, count(o.[OrderID]) orderCount, b.Longitude, b.Latitude, b.ordering 
from ZipCodeServiceAvailability s  
left join pdx_orders_view o on s.ZipCode = left(o.[ZipCode], 5)  
left join ZipCodeBoundaries b on s.ZipCode = b.ZipCode  
Where s.state = 'TX' and Ordering % 10 = 0 and 
     o.opendate is not null 
Group By s.ZipCode, IsServiced, b.Longitude, b.Latitude, b.Ordering  
Having count(o.[OrderID]) is not null
Order by s.ZipCode, b.Ordering
于 2013-02-22T16:29:39.583 に答える