查询这将在SQL Server返回表的具体形式2008

查询这将在SQL Server返回表的具体形式2008

问题描述:

我有这样的一个表:查询这将在SQL Server返回表的具体形式2008

IliskiId KulId DptId DosyaAdi 
------------------------------------ 
    2  332  66  4-92 
    3  332  66  9-50 
    4  332  73  13-96 
    5  332  73  15-19 
    6  334  71  10-11 
    7  334  72  35-14 

我需要一个查询这会以这种形式返回就像这个特殊的例子:

KulId DptId DosyaAdi 
--------------------------------- 
332  66  4-92, 9-50 
332  73  13-96, 15-19 
334  71  10-11 
334  72  35-14 

这是怎么回事这里是我对分组的第一个顶部的同一行中的相同DptId价值和附加价值DosyaAdi ...可以有两个以上的情况下,也像10个不同DosyaAdi值相同的特定DptId。

我尝试过很多办法,但总是得到了“子查询返回多个值”的错误。我知道我需要在表格使用STUFF以组的所有DosyaAdi值在同一个小区,但(与“”分隔)。我谷歌很多,但无法找到任何东西,因为这是一个非常具体的问题。

帮助非常感谢......我需要为这个结果如此糟糕的查询。

+0

我投因为OP已尝试使用重新开'STUFF()'。他/她真的应该包括在讨论中的查询,但我们知道使用'FOR XML PATH'似乎并不成为问题在这里。 –

据,输出你正在寻找类似下面的一些事情可以帮助你:

SELECT DISTINCT 
     T.KulId, 
     T.DptId, 
     STUFF(
      (
       SELECT ','+DosyaAdi 
       FROM <table_name> 
       WHERE KulId = T.KulId 
         AND DptId = T.DptId FOR XML PATH('') 
      ), 1, 1, '') DosyaAdi 
FROM <table_name> T; 

输出:

KulId DptId DosyaAdi 
--------------------------------- 
332  66  4-92, 9-50 
332  73  13-96, 15-19 
334  71  10-11 
334  72  35-14 
+0

这一个伎俩。谢了哥们。 – odemmah

子查询需要的相关条款:

select t.*, 
     stuff((select ', ' + DosyaAdi 
       from t t2 
       where t2.DptId = t2.DptId and t2.DosyaAdi = t.DosyaAdi 
       for xml path ('') 
      ), 1, 2, '' 
      ) as DosyaAdi 
from (select distinct DptId, DosyaAdi 
     from t 
    ) t; 

你也想确保你得到不同行,因此select distinct子查询。

+0

我知道我的东西的代码是正确的通过看你的,但像你说这不是主要问题。但是,我收到“无效的列名't2'”错误。我只是用我的表名改变了t的值。 t.t2.DptId是它引发的部分。 – odemmah