2016-09-13 1 views
1

各OrderIDについて、DueID for PartID-AにPartID-Bより前のDueDateがあるかどうかを確認する必要があります。各行グループ内で、別のフィールドに基づいて日付フィールドを比較します。

行のグループ化OVER(PARTITION)は、すべて同じOrderIDを持つ行を比較するために使用できます。残念なことに、これまでにない成功の渦巻きさえありません。

フィールド比較self-joinは、別のフィールド(PartID)に基づいて1つのフィールド(DueDate)を比較するために使用されていますかわかりません。構文はそのような使用を許可していないようです。

SQL 2012

を使用してこのクエリはデータを引き出しますが、日付の比較をグループも行いません。

SELECT 
    SALES_DOC_NUM AS [OrderID] 
    --, MAX(SALES_DOC_NUM) OVER(PARTITION BY SALES_DOC_NUM) 
    , RTRIM(SHIP_TO_ADDRESS_CODE) AS [ShipToID] 
    , ITEM_NUMBER AS [PartID] 
    , CONVERT(VARCHAR(17), REQ_SHIP_DATE, 110) AS [DueDate] 

FROM SPV3SALESLINEITEM 

WHERE (ITEM_NUMBER = '1RC-AM' 
     OR ITEM_NUMBER = '1RC-DCR') 

    GROUP BY SALES_DOC_NUM, ITEM_NUMBER, SHIP_TO_ADDRESS_CODE, REQ_SHIP_DATE 

    ORDER BY SALES_DOC_NUM; 

クエリのテーブルデータ。

OrderID  ShipToID PartID DueDate 
SO003590  1614  DR  04-11-2016 
SO003591  0532  AM  02-25-2016 
SO003591  0532  DR  05-16-2016 
SO003592  0812  AM  02-15-2016 
SO003592  0812  DR  04-25-2016 
SO003593  2216  AM  04-11-2016 
SO003593  2216  AM  09-12-2016 
SO003593  2216  DR  04-11-2016 
SO003594  1411  AM  02-11-2016 
SO003594  1411  DR  03-21-2016 
SO003596  1065  AM  02-04-2016 
SO003596  1065  DR  06-06-2016 
SO003597  0504  AM  02-04-2016 
SO003597  0504  DR  06-06-2016 
+0

あなたのサンプルデータと質問は私のために震えません。 PartId列に "A"または "B"という値がないのはなぜですか?そして、あなたが望む結果は何ですか? –

+0

ちょっと@GordonLinoffは、不一致の混乱のために叫ぶ。パートAは「AM」であり、パートBは「DR」である。 –

答えて

1

私は次のように想定してみましょう:

  • あなたはすべての注文はPartId "A" はDueDate後でPartId "B" よりも持っていたしますが。
  • 指定された注文には「A」と「B」が1つしかありません。
  • これが発生する注文が必要です。

あなたは、条件付き集計でこれを行うことができます:私はこれがない問題で他の列と条件を持っている投稿で、クエリでどのように適合するかはかなりよく分からない

select sales_doc_num, 
     max(case when partid = 'A' then duedate end) as a_duedate, 
     max(case when partid = 'B' then duedate end) as b_duedate 
from SPV3SALESLINEITEM si 
group by sales_doc_num 
having max(case when partid = 'A' then duedate end) > max(case when partid = 'B' then duedate end); 

+1

これは完璧な@ gordonlinoffです。この特定の質問に関係のない声明の部分を削除することを意味する。あなたの周りに働いていただければ幸いです。 caseステートメントが別のフィールドを返す方法と、条件付きでそれらを比較する方法を見ていきます。私の脳はあなたに感謝します。 –

関連する問題