如何对枢轴列进行分组?

时间:2014-09-05 14:25:53

标签: sql-server pivot

我在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

我该怎么做?

1 个答案:

答案 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逻辑专门查找OpeningClosing值,然后最后一列将对Type不是Opening或{的行进行求和{1}}。

您可以使用PIVOT获取结果,您只需要在应用数据透视功能之前关联“其他”活动。您可以使用子查询执行此操作:

Closing

请参阅SQL Fiddle with Demo