如何使用从第一张图片(数据库表)派生的 T-Sql 语言实现第二张图片。
用红色包围的将成为行,并且值将被放置在
slver_date
中的相应日期上,并且用黄色突出显示的 slver_date 标题将成为包含日期的列。
每个项目的 slvr_date 值是相同的计数,所以我可以说它不是动态的。
映射如下:
oh_qty = 现有数量
firm_po = 确定采购订单
实际需求 = 公司需求
tot_plan_trans_out = 计划转出
foh_ss = FOH-SS
ss_qrt = 安全库存数量
planned_purch = 计划购买
有人告诉我使用 Pivot,但我没有任何使用经验。
以下是透视 + 逆透视组合的基本示例:
create table #example (id int, date datetime, a int, b int, c int, d int)
insert into #example
values (1, '20200101', 1,2,3,4)
, (1, '20200102', 5,6,7,8)
, (1, '20200103', 9,0,1,2)
, (2, '20230103', 1,0,1,0)
declare @dates nvarchar(max)
, @dates_pivot nvarchar(max)
, @sql nvarchar(max)
select @dates = STRING_AGG('pv.' + QUOTENAME(CONVERT(NVARCHAR(MAX), date, 126)) + ' AS ' + QUOTENAME(replace(CONVERT(NVARCHAR(MAX), date, 6), ' ', '-')), ',') within group(order by date)
, @dates_pivot = STRING_AGG(QUOTENAME(CONVERT(NVARCHAR(MAX), date, 126)), ',') within group(order by date)
FROm (
SELECT date
FROM #example
GROUP BY date
) d
select @sql = N'
select id, col AS category,' + @dates + N'
from #example
unpivot (value for col in (a,b,c,d)) upv
pivot (max(value) for date in (' + @dates_pivot + N')) pv
order by id, col
'
exec(@sql)
@dates_pivot 将包含唯一的“透视”日期,该日期将转到透视运算符
@dates 类似,但如果需要的话还包含标题的别名
然后我们构建动态 SQL,它首先将列 a、b、c、d 反转为值,最后将其转回来。
我无法让颜色发挥作用,但你应该能够弄清楚其余的