2016-07-18 28 views
1

特定格式我有一個包含3列置字符串在SQL

A.   B.   C. 
Abc.  Abc.   1 
Abc.  Abc.   2 
Abc.  Abc.   3 
Bcd.  Bcd.   4 
Cde.  Cde.   2 
Cde.  Cde.   4 
Cde.  Cde.   4  

我要讓他們作爲一個單列如下

A.   B.   C. 
Abc.  Abc.   1/2/3/- 
Bcd.  Bcd.   -/-/-/4 
Cde.  Cde.   -/2/-/4 

任何人都可以請幫我一個表? C列的最大數量爲4。所以最好的情況是1/2/3/4。並且如果在A和B列的同一組內的C中存在任何重複,那麼它應該被認爲是一個,因爲在最後兩行的情況下爲

+0

很明顯,我想將行分組以獲得C的特定格式輸出。列 – vatsal

+0

完全不清楚你想要做什麼以及如何做。 – Eiko

回答

2

這是有點棘手。這裏有一個方法:

select a, b, 
     concat_ws('/', 
       (case when sum(c = 1) > 0 then 1 else '-' end), 
       (case when sum(c = 2) > 0 then 1 else '-' end), 
       (case when sum(c = 3) > 0 then 1 else '-' end), 
       (case when sum(c = 4) > 0 then 1 else '-' end) 
       ) as cs 
from t 
group by a, b 
0

您可以使用符合表和GROUP_CONCAT

SELECT s.A, s.B,GROUP_CONCAT(COALESCE(m.C, '-') ORDER BY s.n SEPARATOR '/') AS C 
FROM mytable m 
RIGHT JOIN (
    SELECT A,B, sub.n 
    FROM (SELECT DISTINCT A,B FROM mytable) t 
    CROSS JOIN (SELECT 1 n UNION ALL SELECT 2 UNION ALL 
       SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL 
       SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL 
       SELECT 9 UNION ALL SELECT 10) AS sub) s 
    ON m.A = s.A 
    AND m.B = s.B 
    AND m.C = s.n 
WHERE s.n <= (SELECT MAX(C) FROM mytable) 
GROUP BY s.A, s.B; 

SqlFiddleDemo

輸出:

A  B   C  
------- ------- --------- 
    Abc. Abc. 1/2/3/- 
    Bcd. Bcd. -/-/-/4 
    Cde. Cde. -/2/-/4 

如果你有更多的價值,只需增加理貨表範圍。

+0

對不起,但我使用SAP hana環境和concat_group不可用在那 – vatsal

+0

我的意思是group_concat – vatsal