SQL Pivot-Union 2查询
我有一个查询,它创建了一个透视表,第一行显示布料尺寸:s、M、L和XLSQL Pivot-Union 2查询,sql,sql-server,Sql,Sql Server,我有一个查询,它创建了一个透视表,第一行显示布料尺寸:s、M、L和XL SELECT * FROM (SELECT [LOC], [QUANTITY], [SIZE] FROM [TABLE] WHERE [Item]= '123456') s PIVOT (SUM([QUANTITY]) FOR [SIZE] IN ([S],[M],[L],[XL])) pvt 导致: LOC S M L XL
SELECT *
FROM (SELECT
[LOC],
[QUANTITY],
[SIZE]
FROM [TABLE]
WHERE [Item]= '123456') s
PIVOT (SUM([QUANTITY]) FOR [SIZE] IN ([S],[M],[L],[XL])) pvt
导致:
LOC S M L XL
USA 2 2 1
EUR 1 2 2 1
ASIA 1 2 2 1
因为有些产品有不同的尺码表(例如:男士有:S、M、L。女士有:36、38、40),所以我想将上面的查询与这个查询结合起来,它显示指定产品的可用尺码。
因此,第一行基于“大小”表中的可用大小
SELECT * FROM [TABLE-Sizing] WHERE [Item] = '123'
结果:
34
36
38
我希望有人能帮助我
谢谢
[第1版]
我尝试在第二个查询中使用UNION,但不知道在最后一行中插入什么来使用它:
SELECT *
FROM (SELECT
[LOC],
[QUANTITY],
[SIZE]
FROM [TABLE]
WHERE [Item]= '123456')
UNION
SELECT [SIZE]
FROM [TABLE-SIZING] s
PIVOT (SUM([QUANTITY]) FOR [SIZE] IN (?????)) pvt
如前所述,您首先需要一份可能性列表: 我将把所有这些合并成一个cte,并在stuff语句中用它代替表
--I used a classic stuff technique combined with quotename which brackets the answers
declare @possibilities varchar(max);
;with cte as (
select distinct size from table
union all
select distinct size from [different table]
)
select @possibilities = stuff( (select distinct ','+QUOTENAME(SIZE) from cte for xml path(''))
,1,1,'')
--Now create dynamic SQL
declare @sql varchar(max);
set @sql =
'SELECT *
FROM (SELECT
[LOC],
[QUANTITY],
[SIZE]
FROM [TABLE]
WHERE [Item]= '123456') s
PIVOT (SUM([QUANTITY]) FOR [SIZE] IN ('
+ @possibilities
+ ') pvt'
EXECUTE(@sql)
在该网站上搜索“动态轴心”或“动态交叉表”。这个问题已经被问过很多次了。如果没有样本数据和期望的结果,你的问题就不清楚了。