2013-04-06 48 views
1

我已經搜索了很多類似的主題,但仍然在努力實現這一目標。我試圖在做一些表連接後特別對一列進行分組。任何幫助wouldbe不勝感激SQL Server - 由多個連接和字符串組成

OUTPUT今天

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 

我參加了幾桌,我想每個每個唯一帳戶計劃代碼合併到一個行系統映射。

  • TAB1 =帳戶和系統
  • TAB2 =系統和計劃代碼(映射是 顯示了計劃代碼都涉及到每個系統)
  • TAB3 =帳戶,計劃代號,請求#

我迷路了,我嘗試了一列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 
+0

實際輸出中的列數與顯示的查詢不匹配。你可以請發佈產生你的輸出的實際查詢? – 2013-04-06 01:38:01

+0

我將更新實際查詢的輸出,我只需要輸入輸出的預覽,只關注我關心的列,因爲有些列表是重複的。我現在會更新它,以便清楚。感謝您查看 – Yume 2013-04-06 01:41:50

+0

這裏的主要挑戰是連接'Plan Codes',因爲MS SQL Server沒有直接模擬'GROUP_CONCAT'。其餘的似乎微不足道。 – 2013-04-06 01:45:20

回答

1

如果沒有需要連接的計劃,那麼請看看下面的GROUP BY實現可能滿足您的需求。我刪除了這個腳本的幾個列。爲了符合彙總查詢限制,我使用了MAXC.PCODE(也可能是MIN)和MAX(對於C.REQUEST),這似乎是在那裏擺脫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 
+0

這似乎在做伎倆。感謝PM 77-1的幫助,這看起來符合我的核心需求。 – Yume 2013-04-06 03:18:56