的,我有以下表Tble:SQL查詢Concat的2行同一列
Name | Level -------------- n1 | L1 n1 | L2 n2 | L1 n2 | L3 n3 | L1 n4 | L3
如何我寫一個SQL查詢,這樣的輸出?
Name | Level ---------------- n1 | L1_L2 n2 | L1_L3 n3 | L1 n4 | L3
謝謝
的,我有以下表Tble:SQL查詢Concat的2行同一列
Name | Level -------------- n1 | L1 n1 | L2 n2 | L1 n2 | L3 n3 | L1 n4 | L3
如何我寫一個SQL查詢,這樣的輸出?
Name | Level ---------------- n1 | L1_L2 n2 | L1_L3 n3 | L1 n4 | L3
謝謝
假設MySQL的:
SELECT Name, GROUP_CONCAT(Level SEPARATOR "_") Level
FROM tbl
GROUP BY Name
結果
| NAME | LEVEL | ---------------- | n1 | L1_L2 | | n2 | L1_L3 | | n3 | L1 | | n4 | L3 |
小號o如果它總是2行作爲你的問題標題所暗示的,簡單地做:
SQL> select name,
2 case
3 when min(lvl)=max(lvl) then min(lvl)
4 else min(lvl)||'_'||max(lvl)
5 end lvl
6 from data group by name
7 order by name;
NA LVL
-- -----
n1 L1_L2
n2 L1_L3
n3 L1
n4 L3
在11g中,您可以使用LISTAGG如果每名超過2行:
SQL> select name,
2 listagg(lvl, '_') within group (order by lvl) lvl
3 from data
4 group by name
5 order by name;
NA LVL
-- --------------------
n1 L1_L2
n2 L1_L3
n3 L1
n4 L3
或在10g:
SQL> select name,
2 replace(wm_concat(lvl), ',', '_') lvl
3 from data
4 group by name
5 order by name;
NA LVL
-- --------------------
n1 L1_L2
n2 L1_L3
n3 L1
n4 L3
這裏是甲骨文11克R2解決方案:使用LISTAGG
:
SELECT "Name", LISTAGG("Level", ',') WITHIN GROUP (ORDER BY "Level") "Levels"
FROM Table1
GROUP BY "Name"
ORDER BY "Name";
HSQLDB支持相同的語法,MySQL,但是它使用的字符串常量SQL標準的單引號。
SELECT "Name", GROUP_CONCAT("Level" ORDER BY "Level" SEPARATOR '_') "Level"
FROM "Tbl"
GROUP BY "Name"
ORDER BY "Name"
這個例子假定你有引號,混合大小寫的表和列名。
http://www.hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_aggregate_funcs
什麼[RDBMS](http://en.wikipedia.org/wiki/Relational_database_management_system)您使用的? 'RDBMS'代表*關係數據庫管理系統*。 'RDBMS是SQL'的基礎,並且適用於所有現代數據庫系統,如MS SQL Server,IBM DB2,Oracle,MySQL等... – 2013-03-15 01:53:46
hsqldb + oracle。有沒有一種獨立於rdbms的方式? – Fab 2013-03-15 01:57:56