如何在 T-SQL 中从一张表中创建数据透视表?

问题描述 投票:0回答:1

如何使用从第一张图片(数据库表)派生的 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,但我没有任何使用经验。

sql sql-server database t-sql pivot
1个回答
0
投票

以下是透视 + 逆透视组合的基本示例:

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 反转为值,最后将其转回来。

我无法让颜色发挥作用,但你应该能够弄清楚其余的

© www.soinside.com 2019 - 2024. All rights reserved.