Sql在连接表中选择多行并放入相同的列表视图记录

时间:2013-08-05 19:32:41

标签: .net sql-server-2008

我有一个填充listview的sql语句。我的一个联接表有多个记录,我想进入相同的列表视图记录,而不是连接表中每个项目的单独记录。例如,目前,我在列表视图中返回了7条记录或行,并带有以下数据。但是我只想要返回6条记录,将具有相同topicId的照片分组到同一条记录中。

从主题LEFT OUTER JOIN照片中选择* Topic.TopicId = Photos.TopicId

如果我选择*从主题LEFT OUTER JOIN照片上Topic.TopicId = Photos.TopicId和Topic.PhotoId = Photos.PhotoId,那么我只得到第一张照片。

我想要返回6行:第1行有3张照片,第2行第3行没有照片,第4行有3张照片,第5行没有照片,第6行有1张照片。

topic table
topicId  topic    photoId
   1       abc       1
   2       def       null
   3       ghi       null
   4       jkl       4
   5       mno       null
   6       pqr       7  
然后是照片

photos table                                   
photoid    topicId   photoname
   1         1          bla
   2         1          bla
   3         1          bla
   4         4          bla
   5         4          bla
   6         4          bla
   7         6          bla                                                                            

1 个答案:

答案 0 :(得分:0)

您对数据的外观有点不清楚,但您可以使用一些XML技巧一次性返回多张照片的photoid;

SELECT topic.topicid, topic.topic, 
       STUFF((SELECT ',' + CAST(photoid AS VARCHAR) 
              FROM photos
              WHERE photos.topicid=topic.topicid
              FOR XML PATH ('')), 1, 1, '') photos
FROM topic 

An SQLfiddle to test with