在主查询中的一列中返回多个值

时间:2010-12-10 19:09:13

标签: sql

我正在尝试从表中查找相关信息,并将这些结果(以及其他不相关的结果)作为较大查询的一部分返回到一行。

我已经尝试使用此示例,针对我的数据进行了修改 How to return multiple values in one column (T-SQL)?
但我无法让它发挥作用。它不会提取任何数据(我确定这是用户[]错误)。

如果我使用TempTable直接查询表格,我可以正确地得到结果。

DECLARE @res NVARCHAR(100)  
SET @res = ''  
CREATE TABLE #tempResult ( item nvarchar(100) )  
INSERT INTO #tempResult  
SELECT Relation AS item  
FROM tblNextOfKin  
WHERE ID ='xxx' AND Address ='yyy'  
ORDER BY Relation   
SELECT @res = @res + item + ', ' from #tempResult  
SELECT substring(@res,1,len(@res)-1) as Result  
DROP TABLE #tempResult  

请注意上面的WHERE行, xxx yyy 会根据功能的输入条件而有所不同。但由于你不能在一个函数中使用TempTables ......我被卡住了。

我想查询的表格中的相关字段如下 tblNextOfKin
ID - varchar(12)
名称 - varchar(60)
关系 - varchar(30)
地址 - varchar(100)

我希望这有足够的意义......我在另一篇文章中看到了一个适合的表达 我的SQL-fu不太好。

一旦我得到一个工作函数,我会把它放到我正在处理的SSIS包的主查询中,它正在从许多其他表中提取数据。

如果需要,我可以提供更多详细信息,但该网站说要保持简单,我试图这样做。

谢谢!!!

跟进(因为当我在下面的响应中添加评论时,我无法编辑格式)
我需要能够从不同的列中获得结果 ID名称关系地址
1,Mike,SON,100 Main St. 1,Sara,DAU,100 Main St. 2,Tim,SON,123 South St.
前两个人都住在同一个地址,所以如果我查询ID ='1'和地址='100 Main St.'我需要结果看起来像...
“DAU,SON”

2 个答案:

答案 0 :(得分:0)

Mysql有GROUP_CONCAT

SELECT GROUP_CONCAT(Relation ORDER BY Relation SEPARATOR ', ') AS item  
FROM tblNextOfKin  
WHERE ID ='xxx' AND Address ='yyy' 

您可以使用

为整个表格执行此操作
SELECT ID, Address, GROUP_CONCAT(Relation ORDER BY Relation SEPARATOR ', ') AS item  
FROM tblNextOfKin  
GROUP BY ID, Address 

(假设ID不是唯一的)

注意:这通常是不好的做法作为一个中间步骤,这只能作为演示文稿的最终格式化(否则你最终会取消组合,这将是痛苦)

答案 1 :(得分:0)

我认为你需要这样的东西(SQL Server):

  SELECT stuff((select ',' +Relation 
  FROM tblNextOfKin a
  WHERE ID ='xxx' AND Address ='yyy'  
  ORDER BY Relation
  FOR XML path('')),1,1,'') AS res;