SQL Pivot-Union 2查询

SQL 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

我有一个查询,它创建了一个透视表,第一行显示布料尺寸: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)

在该网站上搜索“动态轴心”或“动态交叉表”。这个问题已经被问过很多次了。如果没有样本数据和期望的结果,你的问题就不清楚了。