SELECT返回一行中的所有项目

时间:2013-02-14 16:43:59

标签: sql sql-server tsql

项目表

ID    item_id     item
------------------------
1     44          shoe 
2     44          boat
3     44          car
4     82          truck
5     82          shirt
6     82          tree
7     99          egg
8     99          carrot
9     99          penguin

所以我这样做:

SELECT item 
FROM items 
WHERE item_id = 82

我在不同的行上获得以下内容:

 truck
 shirt
 tree

是否有一个SELECT可能会返回一行中的所有项目 由一些分隔符分隔:

truck,shirt,tree

我知道如何做到这一点很长但是有一个简单的选择做同样的事情吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

SELECT
     [item_id],
     STUFF(
         (SELECT ',' + [item]
          FROM TableName
          WHERE [item_id] = a.[item_id] AND item_id = 82
          FOR XML PATH (''))
          , 1, 1, '')  AS NamesList
FROM TableName AS a
WHERE item_id = 82
GROUP BY [item_id]

答案 1 :(得分:0)

您可以使用CROSS APPLYFOR XML PATH

SELECT distinct t1.item_id,
  LEFT(itemList , LEN(itemList)-1) itemList 
FROM items t1
CROSS APPLY
(
  SELECT t2.item + ', '
  FROM items t2
  where t1.item_id = t2.item_id
  FOR XML PATH('')
) m (itemList)
where t1.item_id = 82

请参阅SQL Fiddle with Demo