SQL总计列中的某个元素以创建另一列

时间:2017-07-03 03:58:56

标签: sql sql-server

我不确定这个问题的标题,我只想实现下面的内容,如果已经有答案,请提供链接或提供搜索标签,所以我得到了一个方向我我正在寻找。

我有一张如下表,
表1
date | payname | type | amount | ID
2017/07/01 |现金| c | 100 | A1
2017/07/01 |现金| c | 200 | A1
2017/07/01 | USD | f | 200 | A1
2017/07/01 | SGD | f | 100 | A1
2017/07/01 | USD | f | 100 | A1
2017/07/01 |日元| f | 200 | A1
2017/07/02 | USD | f | 200 | A1
2017/07/02 | SGD | f | 400 | A1
2017/07/02 | WON | f | 300 | A1
2017/07/02 |现金| c | 100 | A1
2017/07/02 |现金| c | 300 | A1
2017/07/02 |现金| c | 200 | A1

TAble 2
日期| C.Cards | ID
2017/07/01 | 100 | A1
2017/07/01 | 200 | A1
2017/07/01 | 300 | A1
2017/07/01 | 100 | A1
2017/07/01 | 200 | A1
2017/07/01 | 300 | A1
2017/07/02 | 100 | A1
2017/07/02 | 100 | A1
2017/07/02 | 200 | A1
2017/07/02 | 100 | A1
2017/07/02 | 200 | A1
2017/07/02 | 100 | A1

预期结果
日期|现金|现金 - 外汇| C.Cards
2017/07/01 | 300 | 600 | 1200
2017/07/02 | 600 | 900 | 800

预期结果表
1.日期栏,按表1和表1分组。 2日期栏
2.现金栏,表1类型'c'的总和 3. cash-forex列,表'f'的总和 4. c.cards列,表2 c.cards列的总和

我能够生成预期的结果表,日期和时间。现金& cash-forex专栏,但是当我尝试连接表生成c.cards列时,我找不到预期的答案....请帮助我们,谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用conditional aggregation方法

来实现它
select sum(case when type = 'C' then amount else  0 end) as cash,
       sum(case when type = 'F' then amount else  0 end) as [Cash-Forex]
From Yourtable
case汇总中的

sum语句会根据提及的amount

考虑type

答案 1 :(得分:0)

您可以使用IIF实现此功能(IIF是SQL2012功能。)

    select 
         sum(iif(type = 'C' ,amount,0 )) as cash,
         sum(iif(type = 'F' ,amount,0 )) as [Cash-Forex]
    From Yourtable