2016-01-04 226 views
1

我有兩個表說t1和t2與testid.I連接需要concat val列如果表t1的d1,d2和id是相同的val列。請參考下表。concat一個表組的字段由另一個表的字段

CREATE TABLE #t1 (d1 varchar(100),d2 varchar(100),id int,testid int) 

    INSERT INTO #t1 (d1,d2,id,testid) VALUES ('p','q',1,101) 
    INSERT INTO #t1 (d1,d2,id,testid) VALUES ('r','s',2,102) 
    INSERT INTO #t1 (d1,d2,id,testid) VALUES ('p','q',1,103) 
    INSERT INTO #t1 (d1,d2,id,testid) VALUES ('r','s',1,104) 

    CREATE TABLE #t2 (testid int,val varchar(100)) 

    INSERT INTO #t2 (testid,val) values (101,'x') 
    INSERT INTO #t2 (testid,val) values (102,'y') 
    INSERT INTO #t2 (testid,val) values (103,'z') 
    INSERT INTO #t2 (testid,val) values (104,'xx') 

The result should be: 

    d1 d2 pid val 
    p q 1 x,z 
    r s 2 y 
    r s 1 xx 
+0

哪一部分是你造成的困難? –

+1

谷歌:「sql服務器聚合字符串連接」 –

回答

1
IF OBJECT_ID('tempdb.dbo.#t1') IS NOT NULL 
    DROP TABLE #t1 

IF OBJECT_ID('tempdb.dbo.#t2') IS NOT NULL 
    DROP TABLE #t2 

CREATE TABLE #t1 (d1 VARCHAR(100), d2 VARCHAR(100), id INT, testid INT) 
INSERT INTO #t1 (d1, d2, id, testid) 
VALUES ('p', 'q', 1, 101) 
    , ('r', 's', 2, 102) 
    , ('p', 'q', 1, 103) 
    , ('r', 's', 1, 104) 

CREATE TABLE #t2 (testid INT, val VARCHAR(100)) 
INSERT INTO #t2 (testid, val) 
VALUES (101, 'x') 
    , (102, 'y') 
    , (101, 'z') 
    , (104, 'xx') 

SELECT * 
FROM (
    SELECT d1, d2, id, value = STUFF((
     SELECT [text()] = ',' + val 
     FROM #t2 
     WHERE #t2.testid = #t1.testid 
     FOR XML PATH('')), 1, 1, '')  
    FROM #t1 
) t 
WHERE t.value IS NOT NULL 

輸出 -

d1 d2 id value 
--- --- ---- ---------------- 
p q 1 x,z 
r s 2 y 
r s 1 xx 
+0

謝謝。實際上我有其他列如t1中的a1 - 這也需要選擇。這是相同的查詢可能嗎? – bill

+0

請提供數據樣本和預期結果。 – Devart

+0

實際上,我的t1表是具有多個連接的查詢的結果。它還有許多其他字段。爲了簡單起見,我沒有寫下我的問題。例如(1)(1)varchar(100)d1 VARCHAR(100),d2 VARCHAR(100),id INT,testid INT) – bill

相關問題