T-SQL(azure兼容)将一列中的值作为一行数据获取

T-SQL(azure兼容)将一列中的值作为一行数据获取,sql,sql-server,tsql,azure,azure-sql-database,Sql,Sql Server,Tsql,Azure,Azure Sql Database,我无法从表中获取查询。我有一个产品表和一个图像表 [Images]表架构[列名:数据类型] [ImagetId:int][ProductId:int][url:nvarchr(max)][Size50:bit][Size100:bit][Size200:bit][Size400:bit][Size600:bit][Size800:bit] [产品]表架构 [ProductId:int][Name:nvarchar(50)]附加列 images表中每个产品有6条记录,images表中的位/布尔字段

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

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

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

[产品]表架构

[ProductId:int][Name:nvarchar(50)]附加列

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

我想要什么 我想在一行数据中获取每个产品6种尺寸的图像的每个URL:

所需的查询模式

         [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(我从未使用过),但我无法根据位数据类型确定如何使用Pivot,并且我不需要任何聚合函数

问题: 有人能帮我把6个图像大小的URL中的每一个作为一列,放在每一个产品ID的单行中。另外,我需要它与Sql Azure兼容


提前感谢。

您正在查看您的结果。一个选项是将
MAX
CASE
一起使用:

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

Asure中是否不允许使用
PIVOT