选择具有接近相同数据的行,除了1个字段

时间:2012-09-12 15:29:10

标签: sql sql-server

如果我在一个SQL数据库(访问前端)中有几行,除了一个字段(我知道规范化,但我很高兴地说这不是我的工作!),有一个简单的方法选择具有公共数据的一行并一起显示另一个字段的所有值?我可以编写一个函数以编程方式执行,但是我知道这是一种更简单的方法吗?

例如

animal   brown   dog

animal   brown   cat

animal   brown   horse

作为

animal   brown   dog, cat, horse

2 个答案:

答案 0 :(得分:3)

您可以使用STUFF()来获取此信息:

select distinct col1, col2,
  Stuff((SELECT N', ' + col3 
         FROM yourtable t2
         where t1.col1 = t2.col1
         FOR XML PATH(''),TYPE)
        .value('text()[1]','nvarchar(max)'),1,2,N'')
from yourtable t1

请参阅SQL Fiddle with Demo

答案 1 :(得分:1)

以下是您需要使用的技术示例:

select 'test' as Test, 1 as Item 
into #test 
union select 'test2', 2 
union select 'test', 3 
union select NUll, 4 
union select 'test', 5 

select t2.test, STUFF((SELECT  ', ' + cast(t1.Item as varchar (10) )
        FROM #test t1 where t2.test = t1.test 
        FOR XML PATH('')), 1, 1, '') 
     from #test t2
     group by t2.test