2013-02-28 61 views
0

我有產生以下結果在一列連接多個行

NAME   WeekPattern 

John Smith 
John Smith // 
John Smith OO 
Jack Jones 
Jack Jones O 
Jack Jones // 

查詢有沒有一種方法我可以連接的WeekPattern列,這樣的結果將顯示如下:

NAME   WeekPattern 

John Smith  // OO 
Jack Jones  O // 

我曾嘗試使用FOR XML PATH但無法使其正常工作,下面是查詢我的嘗試:

SELECT 
p.p_surname, 
p.p_forenames, 
LEFT(sr.sr_weekpattern , LEN(sr.sr_weekpattern)-1) AS Weekpattern 
FROM 
unitesnapshot.dbo.capd_studentregister sr 
INNER JOIN unitesnapshot.dbo.capd_person p ON p.p_id = sr.sr_student 
CROSS APPLY 
(
    SELECT sr.sr_weekpattern + ' ' 
    FROM unitesnapshot.dbo.capd_studentregister sr1 
    INNER JOIN unitesnapshot.dbo.capd_person p1 ON p1.p_id = sr1.sr_student 

    WHERE p.p_id = p1.p_id 
    FOR XML PATH('') 
) pre_trimmed (Weekpattern) 
GROUP BY p.p_surname, p.p_forenames, sr.sr_weekpattern; 

運行此查詢時出現此錯誤:

傳遞給LEFT或SUBSTRING函數的長度參數無效。

任何幫助會根據您現有的查詢非常感激

回答

1

,你是不是在LEFT引用正確的列,你應該用:

SELECT 
    p.p_surname, 
    p.p_forenames, 
    LEFT(pre_trimmed.Weekpattern , LEN(pre_trimmed.Weekpattern)-1) AS Weekpattern 
FROM unitesnapshot.dbo.capd_studentregister sr 
INNER JOIN unitesnapshot.dbo.capd_person p 
    ON p.p_id = sr.sr_student 
CROSS APPLY 
(
    SELECT sr1.sr_weekpattern + ' ' 
    FROM unitesnapshot.dbo.capd_studentregister sr1 
    INNER JOIN unitesnapshot.dbo.capd_person p1 
    ON p1.p_id = sr1.sr_student 
    WHERE p.p_id = p1.p_id 
    FOR XML PATH('') 
) pre_trimmed (Weekpattern) 
+0

這個答案的作品,但只有半秒鐘,然後它給出了錯誤:無效的長度參數傳遞給左或SUBSTRING函數。 – Will 2013-02-28 15:39:43

+0

@如果你刪除'WHERE p.p_id = p1.p_id',子查詢是否會自行工作? – Taryn 2013-02-28 15:41:39

+0

沒有仍然不工作,相同的錯誤 – Will 2013-02-28 15:43:22

1
SELECT 
    Name, 
    STUFF(
     (SELECT ' ' + WeekPattern 
      FROM TableName 
      WHERE NAME = a.NAME AND WeekPattern IS NOT NULL 
      FOR XML PATH ('')) 
      , 1, 1, '') AS WeekPatternList 
FROM TableName AS a 
GROUP BY Name 
+0

你可以提供樣本記錄以及你的曲線estion? – 2013-02-28 15:23:51