0

これが私の最初の投稿なので、私の投稿と英語を間違えた場合は申し訳ありません:)

私はすでにグーグルで研究をしていますが、残念ながら今までこれを解決することはできません。

これは私の問題です。各製品の日付ごとの合計注文数を表示し、製品ごとに区別したい

これが私のクエリサンプルです

SELECT Orders.OrderDate
          ,SUM(OrderDetails.OrderDetailQuantity) AS totalOrdered
          ,Products.ProductId 
FROM Orders 
INNER JOIN OrderDetails ON Orders.OrderId = OrderDetails.OrderId 
INNER JOIN Products ON OrderDetails.ProductId = Products.ProductId 
GROUP BY Orders.OrderId
          ,Orders.OrderDate
          ,Products.ProductId 
HAVING (CONVERT(VARCHAR,  Orders.OrderDate, 23) BETWEEN @from AND @to)

ここで、OrderDate間で製品ごとに区別したいのですが、ここでの大きな問題はDATEであることがわかっていますが、このクエリで日付を区別する方法がわかりません。

私を助けてください。ありがとうございました。

PS:これをlinq式で解決したい場合は、非常に受け入れられます:)

4

1 に答える 1

1

サンプルデータと望ましい結果が役立ちます。「個別」と言うときは、グループ化を意味すると思います。WHERE 句では、 @from および @to パラメータの時間コンポーネントが正しく設定されていることを確認する場合 (毎日全体を含めるために)、Order.OrderDate をキャストする必要はありません。比較の左側にキャスト操作を適用することは決して良い考えではありません。

SELECT  --cast(Orders.OrderDate as date),
        Products.ProductId 
        SUM(OrderDetails.OrderDetailQuantity) AS totalOrdered,
FROM Orders 
INNER JOIN OrderDetails ON Orders.OrderId = OrderDetails.OrderId 
INNER JOIN Products ON OrderDetails.ProductId = Products.ProductId 
where Orders.OrderDate between cast(@from as date) AND cast(@to as date)
GROUP 
BY      --cast(Orders.OrderDate as date),
        Products.ProductId 


-- to illustrate:
declare @From datetime = '1/1/2000 10:30:22',
        @To datetime = '1/3/2000 9:11:31'

declare @orders table (i int, dt datetime)
insert into @orders
    values(1, '1/1/2000 8:00'),(2, '1/2/2000 10:00'), (3, '1/4/2000 3:00')


-- only returns i=2
select *
from    @orders
where dt between @From and @To

-- returns i=1 & i=2
select *
from    @orders
where dt between cast(@From as date) and cast(@To as date)
于 2012-05-04T21:59:01.467 に答える