【发布时间】:2019-09-12 20:19:12
【问题描述】:
我想我理解 PIVOT 的概念,但是我在将此查询转换为 PIVOT 时遇到了很多麻烦:
SELECT ID,
CASE WHEN [line] = "1" THEN code ELSE "" AS one_CODE,
CASE WHEN [line] = "1" THEN name ELSE "" AS one_NAME,
CASE WHEN [line] = "1" THEN address_line_1 ELSE "" AS one_ADDRESS_LINE_1,
CASE WHEN [line] = "1" THEN address_line_2 ELSE "" AS one_ADDRESS_LINE_2,
CASE WHEN [line] = "1" THEN address_city ELSE "" AS one_ADDRESS_CITY,
CASE WHEN [line] = "1" THEN address_state ELSE "" AS one_ADDRESS_STATE,
CASE WHEN [line] = "1" THEN address_zip ELSE "" AS one_ADDRESS_ZIP,
CASE WHEN [line] = "2" THEN code ELSE "" AS two_CODE,
CASE WHEN [line] = "2" THEN name ELSE "" AS two_NAME,
CASE WHEN [line] = "2" THEN address_line_1 ELSE "" AS two_ADDRESS_LINE_1,
CASE WHEN [line] = "2" THEN address_line_2 ELSE "" AS two_ADDRESS_LINE_2,
CASE WHEN [line] = "2" THEN address_city ELSE "" AS two_ADDRESS_CITY,
CASE WHEN [line] = "2" THEN address_state ELSE "" AS two_ADDRESS_STATE,
CASE WHEN [line] = "2" THEN address_zip ELSE "" AS two_ADDRESS_ZIP,
CASE WHEN [line] = "3" THEN code ELSE "" AS three_CODE,
CASE WHEN [line] = "3" THEN name ELSE "" AS three_NAME,
CASE WHEN [line] = "3" THEN address_line_1 ELSE "" AS three_ADDRESS_LINE_1,
CASE WHEN [line] = "3" THEN address_line_2 ELSE "" AS three_ADDRESS_LINE_2,
CASE WHEN [line] = "3" THEN address_city ELSE "" AS three_ADDRESS_CITY,
CASE WHEN [line] = "3" THEN address_state ELSE "" AS three_ADDRESS_STATE,
CASE WHEN [line] = "3" THEN address_zip ELSE "" AS three_ADDRESS_ZIP
FROM MYTABLE
期望的结果:
+----+----------+----------+--------------------+--------------------+------------------+-------------------+-----------------+------------+------------+--------------------+--------------------+------------------+-------------------+-----------------+---------------+------------+----------------------+----------------------+--------------------+---------------------+-------------------+
| ID | one_CODE | one_NAME | one_ADDRESS_LINE_1 | one_ADDRESS_LINE_2 | one_ADDRESS_CITY | one_ADDRESS_STATE | one_ADDRESS_ZIP | two_CODE | two_NAME | two_ADDRESS_LINE_1 | two_ADDRESS_LINE_2 | two_ADDRESS_CITY | two_ADDRESS_STATE | two_ADDRESS_ZIP | three_CODE | three_NAME | three_ADDRESS_LINE_1 | three_ADDRESS_LINE_2 | three_ADDRESS_CITY | three_ADDRESS_STATE | three_ADDRESS_ZIP |
+----+----------+----------+--------------------+--------------------+------------------+-------------------+-----------------+------------+------------+--------------------+--------------------+------------------+-------------------+-----------------+---------------+------------+----------------------+----------------------+--------------------+---------------------+-------------------+
| 1 | a | b | c | d | | | | bluecross | blueshield | | | | | | | | | | | | |
| 2 | anthem | myerland | 234 | | | | | | | | | | | | | | | | | | |
| 3 | anthem | b | 234 albin | | | | | blueshield | | | | | | | hartford life | | | | | | |
+----+----------+----------+--------------------+--------------------+------------------+-------------------+-----------------+------------+------------+--------------------+--------------------+------------------+-------------------+-----------------+---------------+------------+----------------------+----------------------+--------------------+---------------------+-------------------+
如何为每个 ID 只输出 1 条记录?
【问题讨论】:
-
使用聚合函数,例如
max(case when ... -
看看我的回答有没有帮助
标签: sql tsql pivot-table