T-SQL(azure compatible)从一列获取值作为一行数据

时间:2014-05-17 20:11:34

标签: sql sql-server tsql azure azure-sql-database

我无法从表中获取查询。我有一个产品表和一个图像表

[图片] 表架构[列名:数据类型]

[ImagetId: int ] [ProductId: int ] [url: nvarchr(max)] [Size50: bit < / em>] [Size100:] [Size200:] [Size400:] [Size600:] [Size800:]

[产品] 表架构

[ProductId: int ] [姓名: nvarchar(50)]其他栏目......

图像表每个产品有6条记录,图像表中的位/布尔字段指定网址指向的图像大小。

我想要什么

我想获取一行数据中每种产品的6种尺寸图像的每个网址:

所需的查询架构

         [ProductId]  [url50]      [url100]   [url200]   [url400]   [url600]   [url800]
 --------------------------------------------------------------------------------------
 row 1  |     1      | http:...  | http:    | http:    | http:    | http:    | http:
 --------------------------------------------------------------------------------------
 row 2  |     2      | http:...  | http:    | http:    | http:    | http:    | http:
 --------------------------------------------------------------------------------------
 row 3  |     3      | http:...  | http:    | http:    | http:    | http:    | http:
 --------------------------------------------------------------------------------------
 row 4  |     4      | http:...  | http:    | http:    | http:    | http:    | http:

我尝试过什么

我厌倦了在图像表上为每个图像大小使用内部连接,如下所示:

SELECT  KrisisStore_Images.ImageId
        , KrisisStore_Images.PortalId
        , KrisisStore_Images.ProductId
        , KrisisStore_Images.Name
        , KrisisStore_Images.Description
        , KrisisStore_Images.PrimaryImage
        , Thumb50.Url AS UrlThumb50
        , Thumb100.Url AS UrlThumb100
FROM    KrisisStore_Images 
        INNER JOIN (SELECT ImageId, Url FROM KrisisStore_Images AS KrisisStore_Images_1 WHERE (Thumb50 = 1)
                    ) AS Thumb50 ON KrisisStore_Images.ImageId = Thumb50.ImageId 
        INNER JOIN (SELECT ImageId, Url FROM KrisisStore_Images AS KrisisStore_Images_2 WHERE (Thumb100 = 1)
                    ) AS Thumb100 ON KrisisStore_Images.ImageId = Thumb100.ImageId

但这不会产生任何结果

如果我将连接类型更改为LEFT OUTER JOIN,那么我会得到每个图像大小的记录行,而不是每个产品都像我想要的那样。

我也尝试过使用Pivot(我从未使用过),但我无法根据位数据类型来确定如何操作,而且我不需要任何聚合函数。

问题

有人可以帮助我将每个6个图片大小的网址作为每个产品ID的一行列。此外,我需要它与Sql Azure兼容。

提前感谢。

1 个答案:

答案 0 :(得分:2)

您希望PIVOT您的搜索结果。一种选择是将MAXCASE

一起使用
SELECT P.ProductId, 
   MAX(CASE WHEN I.Size50 = 1 THEN I.Url END) url50,
   MAX(CASE WHEN I.Size100 = 1 THEN I.Url END) url100,
   MAX(CASE WHEN I.Size200 = 1 THEN I.Url END) url200,
   MAX(CASE WHEN I.Size400 = 1 THEN I.Url END) url400,
   MAX(CASE WHEN I.Size600 = 1 THEN I.Url END) url600,
   MAX(CASE WHEN I.Size800 = 1 THEN I.Url END) url800
FROM Product P 
   JOIN Image I ON P.ProductId = I.ProductId
GROUP BY P.ProductID