2017-04-10 74 views
0

我想我可能会接近这一切都错了,所以如果我请让我知道!如何使用列名的动态选择来总结选择查询?

我有一个表,看起来是这样的:

Id | Region | 0 | 10 | 20 | 30 | 40 | 50 
----------------------------------------- 
01 | London | 24 | 45 | 38 | 29 | 36 | 49 
----------------------------------------- 
02 | Bham | 27 | 42 | 33 | 31 | 38 | 41 
----------------------------------------- 
03 | Lpool | 23 | 38 | 29 | 31 | 34 | 49 

凡行表示,随后人群的年龄范围区域0-10,10-20,20-30等,我想能够为特定年龄段选择人口总和。例如。为10-40:

SELECT (p.10 + p.20 + p.30) FROM Population p WHERE Id = 01 

我该如何去做这个与自定义范围?例如。一个存储过程,其中包含年龄范围的最小值和最大值。 SP不是问题,只是动态定义一系列列的能力。

+5

在这种情况下,它或许会是更好地构建一个表'人口(ID,地区,年龄)',因此行显示数字,而不是几列。 –

+0

这也是我的想法,但我有一个很好的CSV数据组织在这个当前的格式,我更加不确定如何去通过转换它的过程!如果我没有得到任何答案,我可能不得不咬紧牙关,并听取您的建议! – Drummad

+2

如果你不接受这个建议,你可能会长期咬下更多的子弹。 –

回答

-1

如果您想在自定义范围内选择查询,如下所示: - select * from where and and;

+1

但是,这是**行**,这里**列**应该介于0和10之间。 –

0

您可以使用“AND”操作 再举个条​​件,你做错了

SELECT (p.10 + p.20 + p.30) FROM Population p WHERE Id = 01 

你缺少种群P之间或者下划线。别的东西 试试这个:

SELECT * FROM table WHERE BETWEEN 10 and 40 AND id=id_no 
+1

符号'FROM Population p'是有效的SQL;它将表格别名'p'赋予'Population',以便可以使用'p.column'表示法。像'p.10'这样的名字是可疑的,因为'10'不是一个有效的列名。在MySQL中,你可能不得不把名字放在back-ticks中:'''p.'''''(这是MarkDown的地狱),或者在标准的SQL中,你会使用分隔标识符'第10页“ - 或者您将列重命名为像”ages_0_9“,”ages_10_19“或某些此类方案的有效名称。 –