我有这样一张桌子:
表名:PRODUCT
ID PRODUCTID PRODUCTNAME
1 D100 Sample Product
2 K500 Another sample product
Run Code Online (Sandbox Code Playgroud)
有一个相关的表,如下所示:
表名:COLORSIZE
ID PRODUCTID COLOR S M L XL
1 D100 Red S M L
2 D100 Black S M L
3 D100 Blue S M L
4 K500 Green L XL
4 K500 Red L XL
Run Code Online (Sandbox Code Playgroud)
一般规则是产品ID总是具有相同的尺寸,只是不同的颜色.因此,如果D100红色有S,M和L,则所有D100只有S,M和L.产品最多可以有20种颜色.
我需要编写一个输出以下内容的sql语句
PRODUCTSWITHCOLORS
ID PRODUCT ID PRODUCTNAME COLOR1 COLOR2 COLOR3 S M L XL
1 D100 Sample product Red Black Blue S M L
2 K500 Another sample Green Red L XL
Run Code Online (Sandbox Code Playgroud)
"COLOR1","COLOR2"列需要转到"COLOR20"max或者它们需要以最大颜色数结束(例如,如果在查询中,产品的最大颜色数为4,那就没问题了停在COLOR4).
这不是一个理想的方法,但它是被要求的报告.谁能帮我写一个能完成这个的SQL语句?
谢谢!
如果您使用的是2005/2008版本的sql server,则可以使用PIVOT.为了停止最大颜色数,您可以动态构建此查询.这里有一些帮助:
;WITH ProductColor as(
select a.ProductId,
b.ProductName,
a.Color,
RANK() over (partition by ProductName order by a.Id) r
from dbo.COLORSIZE a left join
dbo.PRODUCT b on a.PRODUCTID=b.PRODUCTID
)
SELECT ProductId,ProductName,[1], [2], [3]
FROM
(select ProductId,ProductName,Color,r
from ProductColor) p
PIVOT
(
MIN (Color)
FOR r IN
( [1], [2], [3] )
) AS pvt;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1274 次 |
| 最近记录: |