簡體   English   中英

T-SQL(azure compatible)從一列獲取值作為一行數據

[英]T-SQL (azure compatible) get values from one column as a row of data

我無法從表中獲取查詢。 我有一個產品表和一個圖像表

[Images]表模式[列名: 數據類型 ]

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

[產品]表架構

[ProductId: int ] [名稱: nvarchar(50) ]附加列...

images表有每個Product的6條記錄,Images表中的Bit / Boolean字段指定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(我從未使用過),但我無法根據位數據類型計算出如何做到這一點,而且我不需要任何聚合函數。

有人可以幫助我將每個6個圖像大小的URL作為每行產品ID的一行列。 另外,我需要它與Sql Azure兼容。

提前致謝。

您正在尋找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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM