我需要将子查询中的多行组合成由空格分隔的字符串

时间:2012-10-22 06:37:16

标签: sql-server sql-server-2008 tsql

我正在创建一个包含相册的图片库。图库所有者可以先创建一个或多个相册,然后创建要添加到这些相册的图像。我不得不使用多个视图模板来解决这个问题。无论如何,这就是让我失望的原因。这是我的存储过程的核心:

DECLARE @MyString VARCHAR(MAX)

SELECT @MyString = ISNULL(@MyString + ' ', ' ') + CAST(AlbumID AS VARCHAR(10)) + ' '
FROM BD_AlbumGallery
WHERE ImageID = PROBLEM HERE... Dont know what to do <---
ORDER BY AlbumID

SELECT a.[ImageID]
      ,a.ImageFile
      ,a.[ImageTitle]
      ,a.[ImageCaption]
      ,a.[Description]
      ,a.[Active]
      ,b.[AlbumID]
      ,b.[ImageID]
      ,c.[ListingID]
      ,c.[Active]
      ,c.[LevelID]
      ,c.[Title]

      ,@MyString AS AlbumClass

FROM BD_Gallery A
JOIN BD_AlbumGallery B
ON a.ImageID = b.ImageID
JOIN BD_Listing C
ON a.ListingID = c.ListingID
WHERE a.ListingID = @passedListingID
  AND a.Active = 1
  AND c.Active = 1
  AND c.LevelID > 5

所以问题是,在LI内检索数据 当然还有一个...猜猜显然......在我的画廊模板中正确显示。

我遇到的唯一问题是我需要将@MyString AS AlbumClass绑定到a.ImageID或b.ImageID,因为它们是相同的。

原因是,模板中的专辑是由一个类定义的。

<li class="12 24 15 17">Rest of my code for a single image result</li>

因此,AlbumID被用作类名允许我将它们分配到jQuery下拉类别/专辑列表中,该列表位于此之前的模板中。我在想SubQuery。最终,我需要将结果(出于其他原因)显示在一个结果集中。

请帮助..仍然试图通过学习曲线。

谢谢!

  • 帕特里克

1 个答案:

答案 0 :(得分:2)

select
    a.[ImageID], 
    a.ImageFile,
    a.[ImageTitle],
    a.[ImageCaption],
    a.[Description],
    a.[Active],
    c.[ListingID],
    c.[Active],
    c.[LevelID],
    c.[Title],
    stuff
    (
        (
        select ' ' + CAST(TT.AlbumID AS VARCHAR(10))
        from BD_AlbumGallery as TT
        where TT.[ImageID] = A.[ImageID]
        for xml path(''), type
        ).value('data(.)', 'nvarchar(max)')
    , 1, 1, '') as Listings
from BD_Gallery as A
    left outer join BD_Listing as C on a.ListingID = c.ListingID
where
    a.ListingID = @passedListingID and
    a.Active = 1 and c.Active = 1 and
    c.LevelID > 5