我试图通过以下方式弄清楚如何在SQL Server中透视表:
每当值为" PEAK"时,我希望它从一个新行开始。基本上它看起来像这样。
col1 col2 col3 col4
119 KH ON PEAK
4 K1 ON PEAK
356 KH OFF PEAK
38 K1 ... ...
答案 0 :(得分:1)
老实说,我真的很想知道源数据是如何存储的。这似乎是一项非常多的工作,如果数据已经存储在正确的行中,那么分割它会更容易...... < / p>
粗略地说,这是我必须要做的......除了枢轴之外的所有事情......
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小提琴与SQL服务器一起使用。
从这里你可以根据morder的十进制值来转动数据,每一行都将基于grp。
我不得不使用交叉连接来获取一个值来订购,但我需要它是一致的,因此表foo的顺序将被保留,尽管这绝不是保证。我建议在拆分数据中添加ID或序列,否则订单可能会损坏。如果这样做,我们将不再需要交叉连接。并且可以将over order by中的order by设置为该自动编号值。
我假设从这里你可以弄清楚如何转动。因为MOrder的每个十进制值在每个组中都是相同的。
和完整的支点(再次使用oracle)
如果每组中的#值是动态的,那么我们必须编写一些动态SQL来处理这些情况;我在这里没有这样做。