【问题标题】:SQL total up certain element in a column to create another columnSQL 合计一列中的某些元素以创建另一列
【发布时间】:2017-12-06 06:02:12
【问题描述】:

我不确定这个问题的标题,我只是想实现如下所示,如果已经有答案,请提供链接或提供搜索标签,这样我就知道了我的方向正在寻找。

我有一张如下表,
表 1
日期 |payname |type|amount|ID
2017/07/01 |现金 | c |100 | A1
2017/07/01 |现金 | c |200 | A1
2017/07/01 |美元 | f |200 | A1
2017/07/01 |新元 | f |100 | A1
2017/07/01 |美元 | f |100 | A1
2017/07/01 |日元 | f |200 | A1
2017/07/02 |美元 | f |200 | A1
2017/07/02 |新元 | f |400 | A1
2017/07/02 |获奖 | f |300 | A1
2017/07/02 |现金 | c |100 | A1
2017/07/02 |现金 | c |300 | A1
2017/07/02 |现金 | c |200 | A1

表 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 和 2 日期列分组
2.cash列,表1类型'c'的总和
3. cash-forex 列,'f'表类型的总和
4. c.cards列,表2 c.cards列之和

我能够生成预期结果表、日期和现金和现金外汇列,但是当我尝试加入表格以生成 c.cards 列时,我找不到预期的答案....请帮助伙计们,谢谢!

【问题讨论】:

标签: sql sql-server


【解决方案1】:

您可以使用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

sum 聚合中的case 语句将根据提到的type 考虑amount

【讨论】:

  • 您好,先生,我刚刚修改了我的问题,请您看一下,并提供正确的查询吗?我使用上面的查询生成的前 3 列...但是当我尝试加入表以再生成 1 列时,我没有得到预期的答案...谢谢!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 2021-02-19
    • 2014-06-28
    • 1970-01-01
    • 2021-06-18
    相关资源
    最近更新 更多