【发布时间】:2018-10-13 03:47:04
【问题描述】:
我有一个这样的表,它的每个 LAY 都指定了多次产品名称:
NAME | LAYER | TYPE | DEPTH
-------------------------------------
32_42_1 | LAY_1 | A | 99.4
32_42_1 | LAY_2 | D | 427.2
32_42_1 | LAY_3 | X | 120.4
32_42_1 | LAY_4 | B | 27
32_42_2 | LAY_1 | A | 150.4
32_42_2 | LAY_2 | D | 427.2
32_42_2 | LAY_3 | X | 121.4
32_42_2 | LAY_4 | C | 40
32_42_3 | LAY_1 | F | 80.97
32_42_3 | LAY_2 | Y | 300.2
32_42_3 | LAY_3 | C | 123.4
32_42_3 | LAY_4 | C | 120
我需要每个 NAME 只有一行,所以它需要像这样旋转:
NAME | LAY_1_TYPE | LAY_1_DEPTH | LAY_2_TYPE | LAY_2_DEPTH | LAY_3...
--------------------------------------------------------------------
32_42_1| A | 99.4 | D | 427.2 | ...
32_42_2| A | 150.4 | D | 427.2 | ...
32_42_3| F | 80.7 | Y | 300.2 | ...
我找到了许多类似的解决方案,虽然其中一些已经接近,但我无法更改代码以满足我的需要。
这是我目前所拥有的:
PIVOT
(
MAX(TYPE) For LAYER In (LAY_1,LAY_2,LAY_3,LAY_4,LAY_5)
) piv
但这只会旋转一列,并且不会将数据压缩为每个“名称”的一行
任何帮助将不胜感激!
【问题讨论】:
标签: sql-server tsql pivot ssms conditional-aggregation