我有下表
+---------+----------+--------+------------+------------+
| Country | Provider | Status | End Date | Start Date |
+---------+----------+--------+------------+------------+
| US | P1 | 1 | 1/1/2018 | 2/2/2016 |
| US | P2 | 1 | 11/12/2017 | 3/11/2016 |
| US | P3 | 1 | 10/11/2016 | 4/5/2016 |
| US | P4 | 1 | 5/12/2016 | 9/1/2015 |
| China | P1 | 2 | NA | 2/2/2016 |
| China | P2 | 2 | 11/19/2018 | 3/11/2016 |
| China | P3 | 3 | 6/8/2018 | 4/5/2016 |
| China | P4 | 1 | 9/6/2017 | 9/1/2015 |
+---------+----------+--------+------------+------------+
预期结果
+---------+------+------+------+------+-----------+-----------+-----------+-----------+---------------+---------------+---------------+---------------+-------------+-------------+-------------+-------------+
| Country | P1 | P2 | P3 | P4 | P1 Status | P2 Status | P3 Status | P4 Status | P1 Start Date | P2 Start Date | P3 Start Date | P4 Start Date | P1 End Date | P2 End Date | P3 End Date | P14End Date |
+---------+------+------+------+------+-----------+-----------+-----------+-----------+---------------+---------------+---------------+---------------+-------------+-------------+-------------+-------------+
| US | NULL | NULL | NULL | NULL | 1 | 1 | 1 | 1 | 2/2/2016 | 3/11/2016 | 4/5/2016 | 9/1/2015 | 1/1/2018 | 11/12/2017 | 10/11/2016 | 5/12/2016 |
| China | NULL | NULL | NULL | NULL | 1 | 2 | 3 | 1 | 2/2/2016 | 3/11/2016 | 4/5/2016 | 9/1/2015 | NA | 11/19/2018 | 6/8/2018 | 9/6/2017 |
+---------+------+------+------+------+-----------+-----------+-----------+-----------+---------------+---------------+---------------+---------------+-------------+-------------+-------------+-------------+
你们可以帮助我调整这个表来获得预期的输出吗?
P.S。 - 不要担心NULL列(P1,P2,P3和P4),我可以在SELECT语句中动态创建它们。
答案 0 :(得分:0)
我已将MAX
功能与CASE
或IIF
结合使用,以达到过去类似的效果。基本上,您必须手动转动表。 CASE
或IIF
仅用于根据辅助选择器(在您的情况下为Provider)返回值。然后MAX
删除为其他提供商创建的NULL
值。
这是一个简短的片段,可以帮助您入门。您应该能够将其展开以构建您期望的表格。
SELECT
Country,
P1Status = MAX(IIF(Provider = 'P1', Status, NULL)),
P2Status = MAX(IIF(Provider = 'P2', Status, NULL)),
P1StartDate = MAX((IIF(Provider = 'P1', StartDate, NULL)),
P2StartDate = MAX((IIF(Provider = 'P1', StartDate, NULL))
FROM
Table
GROUP BY
Country