19

オーダービューから注文を取得しようとしています。私の見解では、まったく同じ値を持つ行がいくつかありますが、これらの値を orderid でグループ化し、その注文の数量の合計を取得したいと考えています。

私のビューは次のような結果になります:

 Order_id   Customer_id   Article_id   Delivery_date   Quantity
 ---------------------------------------------------------------------------
 PR10.001   11            20.001a      17-04-2013      1
 PR10.001   11            20.001a      17-04-2013      1
 PR10.001   11            20.001a      17-04-2013      1
 PR13.001   15            41.022b      19-04-2013      1
 PR13.001   15            41.022b      19-04-2013      1

私は次のようなことをしたい:

SELECT Order_id, Customer_id Article_id, Delivery_date, sum(Quantity)
FROM Orders
GROUP BY Order_id

次のようなものを取得するには:

 Order_id   Customer_id   Article_id   Delivery_date   Quantity
 ---------------------------------------------------------------------------
 PR10.001   11            20.001a      17-04-2013      3
 PR13.001   15            41.022b      19-04-2013      2

ただし、1 つの列でグループ化することはできません。そうしないと、次のメッセージが表示されます。

[...] は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。

SQL Server で 1 つの特定の列でグループ化する別の可能性または回避策はありますか?

4

4 に答える 4

24

+を使用しCTEて、注文グループから目的の行を選択できます。SUM(Quantity)OVER(PARTITION BY Order_id)ROW_NUMBER

WITH cte 
     AS (SELECT order_id, 
                customer_id, 
                article_id, 
                delivery_date, 
                quantity=Sum(quantity) 
                           OVER( 
                             partition BY order_id), 
                rn = Row_number() 
                       OVER( 
                         partition BY order_id 
                         ORDER BY delivery_date ASC) 
         FROM   orders) 
SELECT order_id, 
       customer_id, 
       article_id, 
       delivery_date, 
       quantity 
FROM   cte 
WHERE  rn = 1 

デモ

ただし、目的の結果が正しくないようです(質問を編集)

これは私の結果です:

ORDER_ID    CUSTOMER_ID ARTICLE_ID  DELIVERY_DATE   QUANTITY
PR10.001    11          20.001a         17-04-2013  3
PR13.001    15          41.022b         19-04-2013  2
于 2013-04-16T09:38:57.417 に答える
0

あなたのシナリオでは、さまざまな Article_id を持つ Order_id でグループ化するのは正しくないようです。期待した結果が間違っているようです。そのはず:

PR10.001 には 2 つの Article_id 20.001a、41.022b があり、合計数量は 4 (3 ではありません)

各 Order_id の合計数量を取得することを期待していますが、さまざまな列も保持しているため、期待される結果を決定する必要がありますか? 何かのようなもの:

 Order_id   Customer_id   Article_id            Delivery_date   Quantity
 ---------------------------------------------------------------------------
 PR10.001   11            20.001a, 41.022b      17-04-2013      4
 PR13.001   15            41.022b               19-04-2013      2
于 2013-04-16T09:48:45.823 に答える