2017-10-18 39 views
-2

我想這樣編寫SQL轉動表

輸入數據表

customer_id fee_name amount 
1 a 1 
1 b 3.25 
1 c 1.75 
1 d 2 
1 e 0 
2 a 1 
2 b 3.25 
2 c 1.75 
2 d 2 
2 e 0 
3 a 1 
3 b 3.25 
3 c 1.75 
3 d 3.5 
3 e 0 
4 a 1 
4 b 3.25 
4 c 1.75 
4 d 3.5 
4 f 1 
5 a 1 
5 b 3.25 
5 c 1.75 
5 d 3.5 
5 f 1 

見創造的東西,你必須爲所有FEE_NAME和數量組。所以這裏會有三組。 1類似的時間表顧客1和2,第二組類似的客戶3和類似客戶4和5名這個基團也時間表第三組

輸出1應該像

group a b  c  d e f 
    1 1 3.25 1.75 2 0 0 
    2 1 3.25 1.75 3.5 0 0 
    3 1 3.25 1.75 3.5 0 1 

第二輸出表應該將這些組映射到客戶ID。 所以第二個輸出應該看起來像

customer id group 
1 1 
2 1 
3 2 
4 3 
5 3 

任何幫助,高度讚賞。 謝謝

+0

首先找出您正在使用的RDBMS – Strawberry

+0

請正確標記。它是MySQL或SQL Server,不能同時存在。另外,您的查詢嘗試在哪裏? – Eric

+0

我正在使用mysql – stormtrooper12

回答

0
SELECT x.* 
    , y.customer_id 
    , CASE WHEN @prev = x.fee_schedule THEN @i:[email protected] ELSE @i:[email protected]+1 END i 
    , @prev:=x.fee_schedule 
    FROM 
    (SELECT DISTINCT GROUP_CONCAT(amount ORDER BY fee_name) fee_schedule FROM my_table GROUP BY customer_id) x 
    JOIN 
    (SELECT customer_id, GROUP_CONCAT(amount ORDER BY fee_name) fee_schedule FROM my_table GROUP BY customer_id) y 
    ON y.fee_schedule = x.fee_schedule 
    JOIN 
    (SELECT @prev:=null, @i:=0) vars 
ORDER 
    BY y.fee_schedule 
    , y.customer_id;