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

~上記の結果を 1 つの値で区切って連結したい

例えば。 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 サーバーでは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 に答える