Sql server 与一个id关联的多个记录

Sql server 与一个id关联的多个记录,sql-server,sql-server-2014,Sql Server,Sql Server 2014,我有一张像这样的桌子 ID | Cat Type | LOB ID_1 | Cat_1 | lob_1 ID_1 | Cat_1 | lob_2 ID | Cat Type | LOB ID_1 Cat_1 LOB_1, LOB_2 我想看起来像这样 ID | Cat Type | LOB ID_1 | Cat_1 | lob_1 ID_1 | Cat_1 | lob_2 ID | Cat Type | LOB ID_

我有一张像这样的桌子

ID   | Cat Type |   LOB
ID_1 |  Cat_1   |   lob_1
ID_1 |  Cat_1   |   lob_2
ID  | Cat Type | LOB
ID_1  Cat_1      LOB_1, LOB_2
我想看起来像这样

ID   | Cat Type |   LOB
ID_1 |  Cat_1   |   lob_1
ID_1 |  Cat_1   |   lob_2
ID  | Cat Type | LOB
ID_1  Cat_1      LOB_1, LOB_2

如何在SQL中实现这一点?

这是一个基本的字符串聚合查询(在SQL Server中不太基本)。下面是一种使用
外部应用的方法:

select id, cat_type,
       stuff(tt.lob, 1, 2, '') as lobs
from (select distinct id, cat_type
      from t
     ) t outer apply
     (select ', ' + LOB
      from t t2
      where t2.id = t.id and t2.cat_type = t.cat_type
      for xml path ('')
     ) tt(lob);

或无外部应用:

DECLARE @Table1 TABLE (
    ID nvarchar(4),
    CatType nvarchar(5),
    LOB nvarchar(5)
)

INSERT INTO @Table1 VALUES 
('ID_1', 'Cat_1', 'lob_1'),
('ID_1', 'Cat_1', 'lob_2')

SELECT DISTINCT 
        ID,
        CatType,
        STUFF((SELECT ', ' + LOB  FROM @Table1 t WHERE t.ID = ID FOR XML PATH('')), 1, 2, '') as LOB
FROM @Table1

你的数据库管理系统是什么?SQL Server?MySQL?神谕还有什么?你基本上有一个“垂直的桌子”。您可能会使用PIVOT和UNPIVOT将数据转换为您喜欢的格式,而不是您喜欢的格式。如果您希望消除重复(猫类型的
Cat
),那么您应该为
LOB
创建一个单独的表。但你仍然有单独的行。任何列都应该只包含(对于每一行)一段数据。正如@Damien_不信者所说的,你真的不想这样做。您可能希望得到这样的结果集,但几乎可以肯定的是,您不希望得到与最终结果类似的表。