我试图弄清楚如何通过以下方式在 SQL Server 中透视表:
每次值为“PEAK”时,我希望它从新行开始。基本上它看起来像这样。
col1 col2 col3 col4
119 KH ON PEAK
4 K1 ON PEAK
356 KH OFF PEAK
38 K1 ... ...
我试图弄清楚如何通过以下方式在 SQL Server 中透视表:
每次值为“PEAK”时,我希望它从新行开始。基本上它看起来像这样。
col1 col2 col3 col4
119 KH ON PEAK
4 K1 ON PEAK
356 KH OFF PEAK
38 K1 ... ...
老实说,我真的很想知道源数据是如何存储的。如果数据已经存储在正确的行中拆分它会容易得多,这似乎是一项非常多的工作......
大致这就是我必须这样做的方式......除了枢轴之外的所有事情都完成了......
select bar, (row_number() over (order by a.b)-.001)/4 grpOrder,
floor((row_number() over (order by a.b)-.001)/4) as grp
from foo
cross join (Select 1 as b) a
这是 Oracle 尝试的屏幕截图,我现在无法让 SQL fiddle 与 SQL Server 一起工作。
从这里您可以根据 morder 的十进制值旋转数据,并且每一行都将基于 grp。
我必须使用交叉连接来获取要排序的值,但我需要它保持一致,以便保留表 foo 的顺序,尽管这绝不是保证。我建议在拆分数据中添加 ID 或序列,否则订单可能会损坏。如果这样做了,我们将不再需要交叉连接。并且 over order by 中的 order by 可以设置为该自动编号值。
我假设从这里你可以弄清楚如何旋转。因为 MOrder 的每个十进制值在每个组中都是相同的。
和完整的枢轴(再次使用oracle)
如果每个组中的值 # 是动态的,那么我们必须编写一些动态 SQL 来处理这些情况;我在这里没有这样做。