Chr*_*ris -1 t-sql sql-server pivot
我有聚合数据列,并希望将它们转入我的“类型”列。
我的数据看起来像这样
ID Country TYPE Approved Dispursed Payments Amend Deob
---------- ------- ---------- -------- --------- -------- ----- ----
40002-0086 US Republic 79802 66163.05 0 0 0
40022-0002 Russia Sultanate 456435 0 3000 9789 578
40002-0002 Nkorea Dictatorship 50000 50000 0 0 789
40001-0001 Malta Democracy 200000 0 0 456 0
40016-0013 UAE Monarchy 65456 559542 0 0 0
40001-0002 Egypt Federal 250000 250000 0 0 56
40002-0012 Canada Parliamentary 7898 2000 0 789 0
Run Code Online (Sandbox Code Playgroud)
我试图让它看起来像这样
ID Country Republic Approved Republic Disbursed Republic Repaid Sultanate Approved Sultanate Disbursed Federal Approved Federal Disbursed Monarchy Payments
44408 UAE 52,624,624.00 854,046.73 678,678.00 684,829.00 684,751.98 - - -
41898 Canada 23,423,423.00 3,454,345.00 58,810.00 783,766.15 783,766.15 453,654,423.00 8,368,354.00 386,836.00
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 PIVOT 运算符
这是我迄今为止尝试过的
SELECT 'ID' AS ID,
[Republic Approved],[Republic Disbursed],[Republic Repaid],[Sultanate Approved],[Sultanate Disbursed],[Federal Approved],[Federal Disbursed],[Monarchy Payments]
FROM
(SELECT ID, Country
FROM Table.ID) AS SourceTable
PIVOT
(
[TYPE]
FOR ID, Country IN ([Republic Approved],[Republic Disbursed],[Republic Repaid],[Sultanate Approved],[Sultanate Disbursed],[Federal Approved],[Federal Disbursed],[Monarchy Payments]
)
) AS PivotTable;
Run Code Online (Sandbox Code Playgroud)
要以多种方式旋转,您必须单独聚合每种方式。请注意,在下面的代码中,如果不满足 case 语句中的 'type' 条件,则返回 null。所以聚合(我在这里使用 sum)只会聚合那个类型。
select id,
country,
[Republic Approved] = sum(case when type = 'republic' then approved end),
[Republic Disbursed] = sum(case when type = 'republic' then disbursed end),
...,
[Sultanate Approved] = sum(case when type = 'sultanate' then approved end),
...
from sourceTable
group by id,
country
Run Code Online (Sandbox Code Playgroud)
不过,我正在对您在这里真正想要的内容做出一些假设,因为您所说的期望结果意味着您的数据集中有更多数据。
或者,您可以先对这些付款类型列取消透视,将结果名称与政府类型连接起来,然后对连接的名称进行透视。但这会降低性能并且可能更不可读,尽管您可能会因为输入的字符更少而逃脱(从来不是最明智的目标)。