gpt4 book ai didi

sql-server - 以步骤格式构建 SQL 表

转载 作者:行者123 更新时间:2023-12-05 00:25:03 27 4
gpt4 key购买 nike

我目前在 SQL Server 中遇到一个问题,我可能对它在自动化某些过程方面的可扩展性了解不够。所以我想知道以下是否可行:

我有一张 table ,说:

AR_Code CD_code CO_Code Centre  Cost
AL 3F2 811 ops floc
AL 3D2 812 ops cell

理想情况下,我希望以下列格式获取它,它可以足够动态地根据可用字段的数量进行转换:

AR_Code CD_code CO_Code Centre  Cost
AL NULL NULL NULL NULL
AL 3F2 NULL NULL NULL
AL 3F2 811 NULL NULL
AL 3F2 811 ops NULL
AL 3F2 811 ops floc
AL NULL NULL NULL NULL
AL 3D2 NULL NULL NULL
AL 3D2 812 NULL NULL
AL 3D2 812 ops NULL
AL 3D2 812 ops cell

它几乎在字段之间创建了一个步骤。这也是一些会计软件包存储数据的方式。我目前的方法是一场噩梦,它涉及联合,但非常不可扩展:

SELECT 
AR
,NULL as [CD code]
,NULL as [CO Code]
,NULL as [Centre ]
,NULL as [Cost ]
FROM Table
UNION ALL
SELECT
AR
,CD code as [CD code]
,NULL as [CO Code]
,NULL as [Centre ]
,NULL as [Cost ]
FROM Table
etc...

我不确定是否有人遇到过这个问题,或者有解决这个问题的聪明方法 - 我可以稍后再担心顺序,但我的主要问题是:

  • 是否有更具可扩展性的方法来解决这个问题?

谢谢。

-R

最佳答案

您可以使用 APPLY 运算符将值转置为您要查找的形状。您描述的形状需要 APPLY 子句中的 N 行,其中 N 是涉及的列数。从整行开始,我们简单地迭代 N - 1 次并在每次迭代中创建一个新列 null:

0. (AR_Code, CD_code, CO_Code, Centre, Cost)
1. (AR_Code, CD_code, CO_Code, Centre, null)
...
4. (AR_Code, null, null, null, null)

通过这种构造,我们可以简单地将逻辑APPLY 到原始表中的每一行。

select b.*
from (values
(N'AL', N'3F2', N'811', N'ops', N'floc')
, (N'AL', N'3D2', N'812', N'ops', N'cell')
) as a (AR_Code, CD_code, CO_Code, Centre, Cost)
cross apply (values
(a.AR_Code, null, null, null, null)
, (a.AR_Code, a.CD_code, null, null, null)
, (a.AR_Code, a.CD_code, a.CO_Code, null, null)
, (a.AR_Code, a.CD_code, a.CO_Code, a.Centre, null)
, (a.AR_Code, a.CD_code, a.CO_Code, a.Centre, a.Cost)
) as b (AR_Code, CD_code, CO_Code, Centre, Cost);

这应该在一次传递中发生,您在这里真正做的就是通过将 a 中的行乘以 b 中的行来更改原始集合的基数>.

关于sql-server - 以步骤格式构建 SQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40264132/

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