0

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

Select * from topic LEFT OUTER JOIN Photos On Topic.TopicId = Photos.TopicId

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

我想返回 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                                                                            
4

1 回答 1

0

您有点不清楚您希望数据看起来如何,但是您可以photoid使用一些 XML 技巧一次返回多张照片的照片;

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 

一个用于测试的 SQLfiddle

于 2013-08-05T19:48:15.503 回答