知道列名称选择一些值

时间:2011-08-02 12:36:16

标签: sql stored-procedures

我有一个表例如字段(a:int,b:int,c:int,d:int) 我正在写一个商店程序。此存储过程将给出一个字符串('a'或'b'或'c'或'd'),并应该在该列上给出总和。 我正在使用SQL Server 2005。

2 个答案:

答案 0 :(得分:2)

您可以使用CASE表达式选择合适的列进行汇总

SELECT SUM(
CASE @col -- the param of the stored procedure
WHEN 'a' THEN col_a 
WHEN 'b' THEN col_b 
WHEN 'c' THEN col_c 
ELSE col_d END) AS sum_of_column
FROM my_table

在过程中使用动态SQL的替代方法

DECLARE @sql AS VARCHAR(MAX)

SET @sql = 'SELECT SUM(' + @col +') FROM my_table'
EXEC (@sql)

答案 1 :(得分:1)

尝试重新设计数据库,这样就不会尝试对多个列实施相同的操作。仅仅因为SQL表类似于电子表格,这并不意味着您应该将其视为电子表格。

听起来你可能会进行某种形式的属性拆分 - 你有多个列代表相同的“类型”数据,当你应该有多行时,还有一个额外的列来区分这些值(例如,而不是有十二列代表一年中每个月的“值”,你应该有两列,存储月份和“价值”。