2013-10-29 120 views
0

我有这个表: T:SQL合并单元格

enter image description here

d:

enter image description here

什么我试图做的是让每个s_id所有它的符号( DBSymbol)在一个单元格中(合并单元格)。

我发现this教程,这里是我的代码:

select T.s_id, 
    (select '; ' + D.symbol 
    from D 
    where T.D_b_id = D.id 
    FOR XML PATH('')) [DBSymbol] 
from T 

但这里是我得到:

enter image description here

什么是错的?

回答

1

试试这个 -

SELECT t1.s_id, 
     STUFF(
      (SELECT '; ' + symbol AS [text()] 
       FROM (
         SELECT t.s_id, 
          d.symbol 
         FROM T 
         INNER JOIN D ON T.d_b_id = D.id 
         WHERE t.s_id = t1.s_id      
        ) x 
      FOR XML PATH('') 
      ), 1, 1, '') 
FROM T t1 
GROUP BY t1.s_id 

一下:SQL Fiddle

+0

中描述的是相同的结果在上面的代码中有语法错误,在内部查询“t”表未定义。 – vlio20

+0

经过一些语法修改后,它解决了我的问题,不知道这个的性能。谢谢:) – vlio20

+1

语法错误? t在'FROM T'子句中定义。它不区分大小写。有在SQL小提琴工作演示。 – AgentSQL

1
select DISTINCT T.s_id, 
Stuff((SELECT DISTINCT '; ' + D.symbol 
    from D 
    --where T.D_b_id = D.id 
    FOR XML PATH('')),1,1,'') [DBSymbol] 
from T 

here

+1

在那里把东西收')'? – vlio20

+0

你能再次检查我的编辑? –

+0

我得到的结果相同,但在每个符号的开头没有';': – vlio20