2013-08-05 65 views
0

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

SELECT * FROM话题LEFT OUTER JOIN照片在Topic.TopicId = Photos.TopicId

如果我不SELECT * FROM话题LEFT OUTER JOIN照片在Topic.TopicId = Photos.TopicId而Topic.PhotoId =照片。 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                    
+0

我不确定这是可能的。表格是平坦的,这意味着你不能用一个数组来填充一个“单元格”,这看起来就是你想要的。也许有人会提出一些诡计,但这可能是不可能的。 – Jordan

回答

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 

An SQLfiddle to test with

+0

虽然它在小提琴上工作,在我的列表视图中,我得到这个错误:DataBinding:'System.Data.DataRowView'不包含名称'PhotoId'的属性。 – mlg74

相关问题