2017-02-27 79 views
1

Todays_Sales表中的所有列(ID,銷售人員,項目,類型)。SQL查詢爲每個唯一客戶ID返回一個單一行

我目前的查詢結果顯示:

ID  Salesperson  Item Type   
--------------------------------------- 
75343 Mike Germain 3874 Credit   
75343 Ken Johnson  2590 Cash    
67850 Justin Anderson 6435 Check   
67850 Mike Germain 1228 Credit   

我希望我的查詢結果,而不是顯示:

ID  Salesperson 1 Item 1 Type 1 Salesperson 2 Item 2 Type 2 
---------------------------------------------------------------------- 
75343 Mike Germain 3874 Credit Ken Johnson  2590 Cash 
67850 Justin Anderson 6435 Check Mike Germain 1228 Credit 
+0

是否有一個良好知道項目數? – McNets

+0

我沒有列出所有項目 – Tarzan212

+0

對於您的結果,總是有兩套(銷售人員,物品,類型)?是否只有一行具有特定ID?有超過兩個? (例如67850,Ken Johnson,4456,Check)。在這種情況下,你想要什麼樣的結果? – Degan

回答

0

試試這個:

WITH 
input(id,salesperson,item,type) AS (
      SELECT 75343, 'Mike Germain' ,3874,'Credit' 
UNION ALL SELECT 75343, 'Ken Johnson' ,2590,'Cash' 
UNION ALL SELECT 67850, 'Justin Anderson',6435,'Check' 
UNION ALL SELECT 67850, 'Mike Germain' ,1228,'Credit' 
) 
-- Common Table Expression above is just for data, don't use 
-- in real query 
, 
-- begin WITH clause with this if selecting from table 
input_w_seq AS (
SELECT 
    id 
, ROW_NUMBER() OVER(PARTITION BY id) AS seq 
, salesperson 
, item 
, type 
FROM input 
) 
SELECT 
    id 
, MAX(CASE seq WHEN 1 THEN salesperson END) AS salesperson_1 
, MAX(CASE seq WHEN 1 THEN item  END) AS item_1 
, MAX(CASE seq WHEN 1 THEN type  END) AS type_1 
, MAX(CASE seq WHEN 2 THEN salesperson END) AS salesperson_2 
, MAX(CASE seq WHEN 2 THEN item  END) AS item_2 
, MAX(CASE seq WHEN 2 THEN type  END) AS type_2 
FROM input_w_seq 
GROUP BY 
    id 
ORDER BY 
    id 
; 

id |salesperson_1 |item_1|type_1|salesperson_2|item_2|type_2 
67,850|Justin Anderson| 6,435|Check |Mike Germain | 1,228|Credit 
75,343|Mike Germain | 3,874|Credit|Ken Johnson | 2,590|Cash 
+0

感謝這些建議 - 引導我作爲一名新的學習者正確的方向。 – Tarzan212