如何通过从多行

时间:2017-08-02 20:11:05

标签: sql sql-server tsql

我有一个包含各种团队的表格和管理这些团队的赞助商名称。 每个赞助商管理这些团队的开支按同一表格中的各栏列进行分类。 下面是一个示例表,其中包含团队名称,赞助商名称和支出...... 有人可以请帮助我如何分组在每个戏剧总和支出的一行。

表1示例

TEAM1   TEAM2   TEAM3   Sponsor Expenses1   Expenses2
A       B       C       Play1   $1,550      $2,300
A       B       C       Play2   $1,580      $2,225
AA      BB      CC      Play1   $2,320      $2,900
AA      BB      CC      Play2   $,2464      $3,672
AAA     BBB     CCC     Play1   $3,730      $2,890
AAA     BBB     CCC     Play2   $3,852      $2,962

我希望按照每个游戏分组的另一个表格中的输出并总结支出。请帮我。

输出

TEAM1   TEAM2   TEAM3   Play1   Play2   Difference
A       B       C       $3,850   $3,805  $-45
AA      BB      CC      $5,220   $6,136  $916
AAA     BBB     CCC     $6,620   $6,814  $194

3 个答案:

答案 0 :(得分:4)

假设你不需要动态,一个简单的条件聚合应该可以做到这一点

示例

Declare @Team1 varchar(50) = null
Declare @Team2 varchar(50) = null   -- Try 'BB'
Declare @Team3 varchar(50) = null

Select Team1
      ,Team2
      ,Team3
      ,Play1 = sum(case when Sponsor='Play1' then Expenses1+Expenses2 end )
      ,Play2 = sum(case when Sponsor='Play2' then Expenses1+Expenses2 end )
      ,Diff  = sum(case when Sponsor='Play2' then Expenses1+Expenses2 end )-sum(case when Sponsor='Play1' then Expenses1+Expenses2 end )
 from  @YourTable
 Where Team1 = IsNull(@Team1,Team1)
   and Team2 = IsNull(@Team2,Team2)
   and Team3 = IsNull(@Team3,Team3)
 Group By Team1,Team2,Team3

<强>返回

enter image description here

答案 1 :(得分:2)

您可以使用枢轴和差异,如下所示:

Select *, [Difference] = [Play2] - [Play1] from (
    Select Team1, Team2, Team3, Sponsor, Expenses1+Expenses2 as Expenses from #Expensedata ) a
pivot(sum(Expenses) for sponsor in ([Play1],[Play2])) p

输出如下:


+-------+-------+-------+---------+---------+------------+
| Team1 | Team2 | Team3 |  Play1  |  Play2  | Difference |
+-------+-------+-------+---------+---------+------------+
| A     | B     | C     | 3850.00 | 3805.00 |     -45.00 |
| AA    | BB    | CC    | 5220.00 | 6136.00 |     916.00 |
| AAA   | BBB   | CCC   | 6620.00 | 6814.00 |     194.00 |
+-------+-------+-------+---------+---------+------------+

答案 2 :(得分:0)

您需要一个对Team1,Team2,Team3进行分组的查询,并且总结如下:

SUM(CASE WHEN sponsor = 'play1' THEN expenses1 + expenses2 END) as Play1

play2的类似模式,然后做差异应该是轻而易举的!