我在SQL Server中有一个表,其中包含以下条目。
Name Type Amount
------------------------------
ABC Opening 100
CBD Invoice 200
ABC Spreadsheet 250
FBD Closing 400
我正在尝试基于上面创建一个数据透视表,但我也试图将Type列分成3个不同的列。
见下表。这可能吗?
Name Opening Activity Closing
----------------------------------------
ABC 100 200 0
CBD 0 250 0
FBD 0 0 400
到目前为止代码
select *
from
(
select [Name]
,[Type]
,[Amount]
from my_Table
) a
pivot(sum(Amount)
for Type in (Opening], [Closing])
)as pvt
我该怎么做?
答案 0 :(得分:3)
我建议使用聚合函数CASE表达式执行此操作:
select
name,
sum(case when type = 'Opening' then Amount else 0 end) Opening,
sum(case when type not in ('Opening', 'Closing') then Amount else 0 end) Activity,
sum(case when type = 'Closing' then Amount else 0 end) Closing
from my_table
group by name;
见SQL Fiddle with Demo。您将使用CASE逻辑专门查找Opening
和Closing
值,然后最后一列将对Type
不是Opening
或{的行进行求和{1}}。
您可以使用PIVOT获取结果,您只需要在应用数据透视功能之前关联“其他”活动。您可以使用子查询执行此操作:
Closing