【发布时间】:2016-12-29 02:52:50
【问题描述】:
我有一张如下所示的表格。我正在生成一个唯一 ID、两个引用其他表的其他 ID(ArgumentID 和 eventID)、一个分类类型 (eQualType),然后是与 eventID 和 eQualType 关联的值。
实际上有 20 个不同的 Value 列(在此示例中缩短了),绝大多数行仅在 Value1 中包含某些内容。其他的将在 16-20 列中有一个数字(与给定事件和 eQualType 1-5 关联的所有行都将填充相同的列数)。
我正在尝试让下表旋转...
UniqueID ArgumentIDs eventID eQualType Value1 Value2 Value3 Value4
1 7 1 4 1 2 3 4
2 10 1 7 23
3 11 1 2 1 2 2 3
4 15 1 3 1 33 2 31
5 8 1 6 8
6 3 1 1 105 106 107 108
7 9 1 5 0 0 0 0
8 12 2 4 1 2 3 4
9 16 2 1 91 92 93 94
10 19 2 2 1 2 2 3
11 17 2 5 0 0 0 0
12 4 2 3 12 3 2 4
在一个单独的表中插入类似下面的内容(理想情况下会插入到该表中,该表已经包含这种格式的数据)。 ArgumentID 必须是占位符或空白,因为它不会引用另一个表中的任何内容,并且 eQualType 必须是与之前的任何值都不匹配的新值。
UniqueID ArgumentIDs eventID eQualType Value1 Value2 Value3 Value4 Value5
1 x 1 999 105 1 1 1 0
2 x 1 999 106 2 33 2 0
3 x 1 999 107 2 2 3 0
4 x 1 999 108 3 31 4 0
5 8 1 6 8
我不知道这是否可行,或者是否最好在加载到 SQL 之前进行转换。
【问题讨论】:
-
“让表格旋转”到底是什么意思?您如何根据基表中包含的值计算结果中的
Value列?它看起来像聚合值列并将它们作为新列添加到结果表中...... -
结果表中的 Value1 列是基表的第 6 行,Value2 是第 3 行,以此类推
-
基本上,基表中的行被转置为结果表中的列,由 eventID 聚集在一起
-
好的,您想将输入的值列转置为不同的结果行(每个值列一行),并为每行添加另一个具有相同 eventID 的结果“值”列。我认为您应该更新您的问题并重命名结果表 e 的值列名称。 G。进入“Row1Value”、“Row2Value”等并完成示例结果,解释输入行#2和#5的处理逻辑(#2没有出现,#5的处理令人惊讶)。我认为你可以通过两个或三个
pivot/unpivot函数和正确的过滤器来实现你的目标...... -
@RYoda 听起来 OP 实际上想要
UNPIVOT,而不是枢轴。
标签: sql sql-server pivot