1

私は多くの類似のトピックを検索しましたが、これを機能させるのにまだ苦労しています。いくつかのテーブル結合を行った後、特に 1 つの列でグループ化しようとしています。どんな助けでも大歓迎です

今日のアウトプット

Account System  System  Plan Code   Account Plan Code   Request
12345   Sys1    Sys1    P1         12345    P1          00001
12345   Sys1    Sys1    P2         NULL     NULL        NULL
12345   Sys2    Sys2    P3         12345    P3          00002
34567   Sys1    Sys1    P1         NULL     NULL        NULL
34567   Sys1    Sys1    P2         34567    P2          00003
45678   Sys3    Sys3    P4         NULL     NULL        NULL

望ましい出力

Account System  System  Plan Code   Account Plan Code   Request
12345   Sys1    Sys1    P1          12345   P1, P2      00001
12345   Sys2    Sys2    P3          12345   P3          00002
34567   Sys1    Sys1    P2          34567   P1,P2       00003
45678   Sys3    Sys3    P4          NULL    NULL        NULL

いくつかのテーブルを結合しています。プラン コードを組み合わせて、それぞれの固有のアカウントからシステムへのマッピングごとに 1 行にまとめたいと考えています。

  • Tab1 = アカウントとシステム
  • Tab2 = System and Plan Code (各システムに関連する計画コードを示すマッピング)
  • Tab3 = アカウント、プラン コード、リクエスト番号

1 列の GROUP BY を試したところ、GROUP BY 式ではないというエラーが表示されました。そのため、すべての列を含めましたが、出力はまったく変わりません。

SELECT      A.ACCOUNT, A.SYSTEM, B.SYSTEM, B.PCODE, C.ACCOUNT, C.PCODE, C.REQUEST
FROM        MYDB.TAB1 A
LEFT JOIN   MYDB.TAB2 B 
ON      A.SYSTEM = B.SYSTEM
LEFT JOIN   MYDB.TAB3 C
ON      A.ACCOUNT = C.ACCOUNT AND B.PCODE = C.PCODE
WHERE       A.ACCOUNT IS NOT NULL
ORDER BY    A.ACCOUNT
4

1 に答える 1

3

プランを連結する必要がない場合は、次のGROUP BY実装がニーズに合うかどうかを確認してください。このスクリプトのいくつかの列を削除しました。MAX私が使用した集計クエリの制限に準拠するためにC.PCODE(これもMIN同様である可能性があります)、MAXそこC.REQUESTから s を削除するのが良い選択と思われますNULL

SELECT      A.ACCOUNT, A.SYSTEM, MAX(C.PCODE), MAX(C.REQUEST)
FROM        MYDB.TAB1 A
LEFT JOIN   MYDB.TAB2 B 
ON      A.SYSTEM = B.SYSTEM
LEFT JOIN   MYDB.TAB3 C
ON      A.ACCOUNT = C.ACCOUNT AND B.PCODE = C.PCODE
WHERE       A.ACCOUNT IS NOT NULL
GROUP BY A.ACCOUNT, A.SYSTEM
ORDER BY    A.ACCOUNT
于 2013-04-06T02:30:40.780 に答える