2013-02-28 57 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