gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:02:44 25 4
gpt4 key购买 nike

我在从表中获取查询时遇到问题。我有一个产品表和一个图像表

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

[ImagetId:int] [ProductId:int] [url:nvarcr(max)] [Size50:] [Size100:] [Size200:][Size400:] [Size600:>] [大小800:]

[产品]表架构

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

对于每个产品,图像表有 6 条记录,图像表中的位/ bool 字段指定 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(我从未使用过),但我无法根据位数据类型弄清楚如何做到这一点,而且我不需要任何聚合函数。

问题

有人可以帮助我将每个产品 ID 的 6 个图像尺寸 URL 作为单行中的一列获取吗?另外,我需要它与 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

关于sql - T-SQL(azure 兼容)从一列中获取值作为一行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23715643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com