0

询问

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

请指导

4

4 回答 4

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

示例查询:

SQLFIDDLE示例

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 |
于 2012-12-20T06:39:25.587 回答
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
于 2012-12-20T06:38:20.400 回答
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 Server 中你可以使用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

* SQLFIDDLE

于 2012-12-20T06:36:54.570 回答
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
于 2012-12-20T06:50:04.070 回答