Sql server 以step格式构造SQL表
我目前在SQL server中面临一个问题,我可能不太了解它在自动化某些过程方面的可伸缩性。因此,我想知道以下是否可行: 我有一张桌子,说:Sql server 以step格式构造SQL表,sql-server,Sql Server,我目前在SQL server中面临一个问题,我可能不太了解它在自动化某些过程方面的可伸缩性。因此,我想知道以下是否可行: 我有一张桌子,说: AR_Code CD_code CO_Code Centre Cost AL 3F2 811 ops floc AL 3D2 812 ops cell 理想情况下,我希望它采用以下格式,在这种格式中,它可以具有足够的动态性,可以根据可用字段的数量进行移动: AR_Code CD_cod
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
操作符将值转换为您要查找的形状。您描述的形状需要N
行,在APPLY
子句中,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)
通过这种构造,我们可以简单地将逻辑应用于原始表中的每一行
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
中的行来更改原始集合的基数。我认为您的方法没有任何问题。速度慢吗?您需要构建这样的报告还是修改存储这些数据的方式?这是一次性任务吗?使用虚拟聚合可能会有所帮助。在前两个阶段,它并不慢,只是单调乏味。特别是如果我想扩大规模的话。i、 e.在一周内再增加5列,然后在下一周减少。这将导致结构发生变化。。其次,它需要成为存储数据的一种方式,因为第三方技术需要导入数据的特定结构@Jeroemostert我会调查一下并告诉你最新情况。谢谢你!