Sql Server Group按子查询

时间:2015-11-25 01:44:31

标签: sql-server

我有一个销售交易数据库,其中包含由唯一的销售号码识别的多个商品的销售情况。在salenum领域。某些销售是应纳税的,并由代码字段标识,其值为“T'”。未纳税的销售只是省略了“T'值表示这是一项非纳税交易。

QUANTITY      PARTN     COST     PRICE    CODE  SALENUM
3           SAS6895     2.38       9.99     D   411436
1           GELBKP      7.4458    11.5409   D   411436
3           BRW.5       0.1471     0.228    D   411436
1           GWG        24.5668    45.00     D   411436
1           MODC4       1.3767     3.5      D   411436
1           GPFQ        6.9969    10.8451   D   411436
1           Tax         6.605      6.605    T   411436
1           OTC         0.4144     0.99     D   411437
1           S777        1.71       2.6505   D   411437

在salnumber系列411436中,代码T显示该销售已征税。 salenumber 411437省略了T所以这是一个豁免销售。

我想要做的是查询表格并将按salenumber分组的交易总结为应税销售额,然后将另一个显示豁免销售额的查询求和。

select sum(quantity*price) as total from business where date = '8/28/2014'
group by salenum

会显示两种类型,但我无法通过Tax过滤我认为这可以通过子查询完成,但我现在在语法上丢失了。

感谢高级

PS,我研究了如何清楚地陈述我的问题的帮助部分,所以反馈将会受到赞赏,所以我可以成为这个论坛的更好成员

2 个答案:

答案 0 :(得分:1)

如果您想要两行,一个用于纳税,一个用于非应税,那么您可以使用两个级别的聚合。例如,要将结果放在两个不同的行上:

select IsTaxable, sum(sumqp)
from (select salenum, sum(quantity * price) as sumqp,
             max(case when code = 'T' then 1 else 0 end) as IsTaxable
      from transactions t
      group by salenum
     ) t
group by IsTaxable;

答案 1 :(得分:0)

也可以将两个值计算为两列

select salenum, sum(CASE code WHEN 'T' THEN quantity * price ELSE 0 END) as TaxedAmount,
                sum(CASE code WHEN 'D' THEN quantity * price ELSE 0 END) as NoTaxedAmount
      from transactions t
group by salenum