1

月曜日から日曜日までの注文商品の数を取得したいのですが、土曜日と日曜日の注文を金曜日に追加すると、クエリ結果には Orderdates (月曜日から金曜日) のみが表示されます。

曜日ごとに注文を表示するこのSQLがすでにあります。

select DATENAME(weekday,orderdate) Day,CONVERT(VARCHAR(10), orderdate, 103) orderdate, 
COUNT(orderdate) Orders  
from Orders_tb
where orderDate >= '2012-03-01 00:00:00.000'  
and orderDate <= '2012-03-31 00:00:00.000'  
group by datepart(day,orderDate),orderdate,DATENAME(weekday,orderdate)

ご意見ありがとうございます。

4

1 に答える 1

1

明確化後に編集します。

週末の日を金曜日に変更するユースケース。派生テーブルは、orderdate が必要な場所で同じ式を複製する必要を避けるために使用されます。

select DATENAME(weekday,orderdate_trimmed) Day,
       CONVERT(VARCHAR(10), orderdate_trimmed, 103) orderdate, 
       COUNT(orderdate_trimmed) Orders
from 
(
  select *, 
         order_date -
         case DATENAME(weekday,orderdate)
              when 'Saturday' then 1
              when 'Sunday' then 2
              else 0
          end
         orderdate_trimmed
    from Orders_tb
) a
where orderDate >= '2012-03-01 00:00:00.000'
  and orderDate <= '2012-03-31 00:00:00.000'
group by orderdate_trimmed

case ステートメントを使用することによってのみ、一致する日数をカウントできます。

select COUNT(orderdate) TotalOrders,
       COUNT(CASE WHEN DATENAME(weekday,orderdate) = 'Monday' then 1 end) Monday,
       COUNT(CASE WHEN DATENAME(weekday,orderdate) = 'Tuesday' then 1 end) Tuesday,
       COUNT(CASE WHEN DATENAME(weekday,orderdate) = 'Wednesday' then 1 end) Wednesday,
       COUNT(CASE WHEN DATENAME(weekday,orderdate) = 'Thursday' then 1 end) Thursday,
       COUNT(CASE WHEN DATENAME(weekday,orderdate) = 'Friday' 
                    OR DATENAME(weekday,orderdate) = 'Saturday' 
                    OR DATENAME(weekday,orderdate) = 'Sunday'
                  THEN 1 end) Friday
from Orders_tb
where orderDate >= '2012-03-01 00:00:00.000'  
and orderDate <= '2012-03-31 00:00:00.000'  

日付に関する警告: 日付には時間部分が含まれる可能性があるため、次のように比較する方が賢明です。

where orderDate >= '2012-03-01 00:00:00.000'  
and orderDate < '2012-04-01 00:00:00.000'  
于 2012-04-18T11:52:10.377 に答える