0

我试图弄清楚如何通过以下方式在 SQL Server 中透视表:

在此处输入图像描述

每次值为“PEAK”时,我希望它从新行开始。基本上它看起来像这样。

col1 col2 col3 col4 119 KH ON PEAK 4 K1 ON PEAK 356 KH OFF PEAK 38 K1 ... ...

4

1 回答 1

1

老实说,我真的很想知道源数据是如何存储的。如果数据已经存储在正确的行中拆分它会容易得多,这似乎是一项非常多的工作......

大致这就是我必须这样做的方式......除了枢轴之外的所有事情都完成了......

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 来处理这些情况;我在这里没有这样做。

于 2015-12-10T17:50:10.840 回答