2014-01-08 101 views
1

您好,我有下表。它每年有6个新代码,从1到6.我需要计算6个新代码每年的市场资本为 `年份1832新代码1总和6502500新代码2总和= 236598 ....'按年份和部门计算市值的总和

enter image description here

+0

首先尝试通过你自己,如果你面临任何问题,然后问这里。 – Luftwaffe

回答

0
SELECT Year, Newcode, sum(MarketCapital) MarketCapital 
FROM MyTable 
GROUP BY Year, Newcode 
1

从我怎么读你的问题你想7列; YEAR, SUM1, SUM2, SUM3, SUM4, SUM5, SUM6

SELECT 
    YEAR, 
    SUM(CASE WHEN NEWCODE = 1 THEN MARKETCAPITAL ELSE 0 END) AS SUM1, 
    SUM(CASE WHEN NEWCODE = 2 THEN MARKETCAPITAL ELSE 0 END) AS SUM2, 
    SUM(CASE WHEN NEWCODE = 3 THEN MARKETCAPITAL ELSE 0 END) AS SUM3, 
    SUM(CASE WHEN NEWCODE = 4 THEN MARKETCAPITAL ELSE 0 END) AS SUM4, 
    SUM(CASE WHEN NEWCODE = 5 THEN MARKETCAPITAL ELSE 0 END) AS SUM5, 
    SUM(CASE WHEN NEWCODE = 6 THEN MARKETCAPITAL ELSE 0 END) AS SUM6, 
    SUM(CASE WHEN NEWCODE > 6 THEN MARKETCAPITAL ELSE 0 END) AS SUM_ABOVE6, 
    SUM(CASE WHEN NEWCODE < 1 THEN MARKETCAPITAL ELSE 0 END) AS SUM_BELOW1 
FROM 
    yourTable 
GROUP BY 
    YEAR 

我已经添加了2个额外的字段作为完整性检查。这样你就不会丢弃数据,你总是会捕获和聚合它。例如,在您检查了两个字段始终为0之后,您可能会稍后放弃。

但是,要小心这种结构。这对于向人类进行演示很有用,但是对于进一步的数据处理来说很糟糕。如果你要去任何其他查询下游中使用这个结果,只是坚持,你已具备,并做了简单的GROUP BY就可以了标准化的结构...

SELECT 
    YEAR, 
    NEWCODE, 
    SUM(MARKETCAPITAL) AS MARKETCAPITAL 
FROM 
    yourTable 
GROUP BY 
    YEAR, 
    NEWCODE 

这种标准化的结构自动适应如果/当你添加另一个NEWCODE(不需要SUM_ABOVE6和SUM_BELOW0作为保护)。而且它使参与数据变得更容易(第一种形式将会谴责你永远是陈述的时候)。