gpt4 book ai didi

sql-server - SQL PIVOT 在可变数量的行上

转载 作者:行者123 更新时间:2023-12-04 02:17:21 27 4
gpt4 key购买 nike

我在 MSSQL 服务器上有以下数据:

Item No_    Unit Of Measure     Qty Per Base UoM    Rounding Precision
000001 PIECE 1 1.0
000001 PALLET 100 1.0
000001 BOX 12 1.0
000002 KG 1 1.0
000002 TON 1000 0.001

我正在尝试获得以下输出:

Item No_    UoM1    Qty pb UoM1 RP1     UoM2    Qty pb UoM2     RP2     UoM3    Qty pb UoM3 RP3
000001 PIECE 1 1.0 PALLET 100 1.0 BOX 12 1.0
000002 KG 1 1.0 TON 1000 0.0001 NULL NULL NULL

我尝试使用 PIVOT 运算符实现此目的,但它似乎不正确。

实现所需输出的正确方法是什么?

最佳答案

对于真正通用的解决方案,您需要使用 Dynamic-SQL。但是你说你想要起点,所以我给你一个。您可以使用:

LiveDemo

WITH cte AS
(
SELECT *, ROW_NUMBER() OVER(PARTITION BY Item_No_ ORDER BY (SELECT 1)) AS rn
FROM #mytable
)
select Item_No_,
max(case when rn = 1 then Unit_Of_Measure end) UoM1,
max(case when rn = 1 then Qty_Per_Base_UoM end) [Qty pb UoM1],
max(case when rn = 1 then Rounding_Precision end) RP1,
max(case when rn = 2 then Unit_Of_Measure end) UoM2,
max(case when rn = 2 then Qty_Per_Base_UoM end) [Qty pb UoM2],
max(case when rn = 2 then Rounding_Precision end) RP2,
max(case when rn = 3 then Unit_Of_Measure end) UoM3,
max(case when rn = 3 then Qty_Per_Base_UoM end) [Qty pb UoM3],
max(case when rn = 3 then Rounding_Precision end) RP3,
max(case when rn = 4 then Unit_Of_Measure end) UoM4,
max(case when rn = 4 then Qty_Per_Base_UoM end) [Qty pb UoM4],
max(case when rn = 4 then Rounding_Precision end) RP4
from cte
group by Item_No_;

要点是,如果您事先知道您的单位数量,您可以从 1 .. n 创建硬编码列。

有关更多信息,请搜索Dynamic Pivot multiple columns。这是可以实现的,但首先尝试破解这个解决方案。

关于sql-server - SQL PIVOT 在可变数量的行上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33122120/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com