查询
select DISTINCT(a.col1),b.col2
FROM tab1 a RIGHT OUTER JOIN tab2 b
ON a.tab1_id=b.tab2_id
WHERE
a.tab1_id=105
输出
col1 col2
______________________
A val1
A val2
我想将上述结果连接成一个值~
分隔
例如。 A~val1~val2
请指导
答案 0 :(得分:3)
您的查询:
SELECT a.col1+'~'+
STUFF((
SELECT '~' + s2.col2
FROM tab1 s1
RIGHT OUTER JOIN tab2 s2 ON s1.tab1_id=s2.tab2_id
WHERE a.col1 = s1.col1
FOR XML PATH('')
), 1, 1, '') AS columns2
FROM tab1 a
RIGHT OUTER JOIN tab2 b ON a.tab1_id=b.tab2_id
WHERE a.tab1_id=105
GROUP BY a.col1
示例查询:
<强> SQLFIDDLEExample 强>
SELECT
s.col1+'~'+
STUFF((
SELECT '~' + col2
FROM Table1 s2
WHERE s2.col1 = s.col1
FOR XML PATH('')
), 1, 1, '') AS columns2
FROM Table1 s
GROUP BY s.col1
结果:
| COLUMNS2 |
---------------
| A~val1~val2 |
答案 1 :(得分:1)
使用GROUP_CONCAT(b.col2 SEPARATOR '~')
整个查询:
select a.col1, GROUP_CONCAT(b.col2 SEPARATOR '~') AS grouped
FROM tab1 a RIGHT OUTER JOIN tab2 b
ON a.tab1_id=b.tab2_id
WHERE
a.tab1_id=105
GROUP BY a.col1
答案 2 :(得分:0)
在MySQL中,您可以使用GROUP_CONCAT
select a.col1, GROUP_CONCAT(b.col2,'/')
FROM tab1 a RIGHT OUTER JOIN tab2 b
ON a.tab1_id=b.tab2_id
WHERE
a.tab1_id=105
GROUP BY a.col1
在MySQL服务器中,您可以使用CROSS Apply
或Stuff
甚至是这个简单的Xml Path for
。也许你已经得到了答案。但是你走了,更容易。您可以将示例表视为已加入查询的结果,而不使用col1 = 1等条件。请使用以下查询合并您的联接表格结构。
样本表:
COL1 COL2
1 john
2 tim
1 jack
3 rose
查询:
SELECT col1, replace
((SELECT col2 AS [data()]
FROM tab1
WHERE col1 = a.col1
ORDER BY col1 FOR xml path('')), ' ','/')
FROM tab1 a
WHERE col1 IS NOT NULL
AND col1 = 1
GROUP BY col1
;
结果:我的键盘没有您需要的特定字符。你可以用它替换正斜杠;)
COL1 COLUMN_1
1 john/jack
答案 3 :(得分:0)
结果作为单个字符串输出,请尝试:
DECLARE @output VARCHAR(MAX)
SELECT @output =COALESCE( @output + '~', Col1+'~')+Col2 FROM(
SELECT DISTINCT(a.col1) Col1,b.col2 Col2
FROM tab1 a RIGHT OUTER JOIN tab2 b
ON a.tab1_id=b.tab2_id
WHERE
a.tab1_id=105
)x
GROUP BY Col1,Col2
SELECT @output