如何从SQLServer中的表中获取每个特定年份的总人口?

时间:2014-02-10 14:09:40

标签: sql sql-server sql-server-2008

我有一个表人口

Stateid  StateName  Year  Popution

01      xx          2008     200000

02      xy          2008     400000

01      xx          2009     500000

02      xy          2009     900000

因此需要结果每个州2009年的总人口?

Expected Result xx:700000,xy:1300000

如何获得此结果。任何人请建议我?

4 个答案:

答案 0 :(得分:0)

这样的东西会给你你想要的东西。

select statename, sum(population) thesum
from population
maybe a where clause
group by statename

但是,你说你想要的是非常奇怪的。对于州xx,2009年的50000人可能包括2008年居住在那里的许多人。正如你所描述的那样,这个问题意味着你要对这些人进行两次计算。

答案 1 :(得分:0)

要总结在给定年份的所有年份中相同州的所有人口价值,您可以尝试这样做:

DECLARE @year NVARCHAR(4)
SET @year = '2009'

SELECT Stateid, StateName, SUM(Popution) FROM
(
    SELECT Stateid, StateName, Popution FROM Population WHERE Year <= @year
) tmp
GROUP BY Stateid, Statename

这将在内部查询中选择一年前或包括所需年份的所有记录。然后,每个州建立总和。

实际上,如果您的数据如下,则只会看到此内容:

Stateid  StateName  Year  Popution

01      xx          2008     200000

02      xy          2008     400000

01      xx          2009     500000

02      xy          2009     900000

01      xx          2010     600000

02      xy          2010     1000000

然后,如果你评估到2009年,你就会得到你期望的数字。

01      xx          700000
02      xy          1300000

2010年你会得到

01      xx          1300000
02      xy          2300000

答案 2 :(得分:0)

尝试

SELECT
  [StateName], sum([Popution])
FROM Populations
GROUP BY [StateName]
ORDER BY [StateName];

哪个给出了

STATENAME   COLUMN_1
xx  700000
xy  1300000

See here for a live fiddle

答案 3 :(得分:-2)

您的问题是错误的,您将无法获得2009年的xx:700000和xy = 1300000的结果。但如果您在2009年拥有多个值,请使用以下查询。

CREATE表测试 (stateid INT,statename VARCHAR(500),yeard int,POPULATION INT)

选择* FROM测试

SELECT statename,SUM(POPULATION) 从测试 在哪里= 2009年 GROUP BY州名

此致 穆萨