我有一张这样的表:
表名:PRODUCT
ID PRODUCTID PRODUCTNAME
1 D100 Sample Product
2 K500 Another sample product
有一个相关的表格如下:
表名: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
一般规则是产品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
“COLOR1”,“COLOR2”列需要转到“COLOR20”max或者它们需要以最大颜色数结束(即,如果在查询中,产品的最大颜色数为4 ,停在COLOR4处可以。)
这不是一种理想的方式,但它是已经请求的报告。任何人都可以帮我写一个能完成此任务的SQL语句吗?
谢谢!
答案 0 :(得分:6)
如果您使用的是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;
答案 1 :(得分:0)
这将让你开始..
你需要做SubQuerys,但问题是你试图根据你拥有的颜色数量来制作一张桌子。
您的架构无法正常运行。
SELECT
A.ID
,B.PRODUCTID
,B.PRODUCTNAME
,B.COLOR1
,B.COLOR2
,B.COLOR3
,B.S
,B.M
,B.L
FROM
PRODUCT A
INNER JOIN
COLORSIZE B
ON A.ProductID = B.ProductID