【发布时间】:2012-08-06 08:54:30
【问题描述】:
我正在尝试使用 SQL 查找表中特定值的总和。一个示例表是:
+-------+-------+-------+-------+-------+-------+-------+
| ID | Co1 | Va1 | Co2 | Va2 | Co3 | Va3 |
+-------+-------+-------+-------+-------+-------+-------+
| 01 | AA1 | 23.0| AA2 | 11.2| AA3 | 328.34|
| 02 | AA2 | 27.0| AA3 | 234.56| AA4 | 23.8|
| 03 | AA1 | 409.01| AA4 | 234.98| NULL | NULL |
+-------+-------+-------+-------+-------+-------+-------+
我有 35 个这样的“代码”列和值。
我需要的是选择一个只有一个代码的表格。假设我需要代码 AA3,这将是(此处不需要代码列,而只是显示我从哪里获得值):
+-------+-------+--------+
| ID | Code | Value |
+-------+-------+--------+
| 01 | AA3 | 328.34|
| 02 | AA3 | 234.56|
| 03 | AA3 | 0|
+-------+-------+--------+
稍后我将需要另一个(单独的)查询,其中包含多个代码的总和,例如代码 AA1 和 AA2 的总和。
+-------+---------+
| ID | Value |
+-------+---------+
| 01 | 34.2|
| 02 | 27.0|
| 03 | 409.01|
+-------+---------+
我正在考虑创建一个“WHERE”并在每 35 列上运行一次,但这确实很乏味,而且似乎效率也不高。我想知道是否有办法通过 SQL 来做到这一点(我可以用 Excel 和 if 语句来做到这一点,而且效果很好)。
也许有办法“搜索”一行,返回列名,然后使用该列名检索数字?
如果您需要更多信息,请告诉我 =)
【问题讨论】:
-
您使用的是哪个 RDMBS,SQL Server、Oracle、MySQL?在您说“使用 SQL”的第一句话中,您的意思是 MS SQL Server?关于最后一个问题,您是否只有 3 个代码列? SUM 仅适用于 AA1 和 AA2 或更多组合?
-
啊,是的,我的错。我使用的是 SQL Server 2008R2。
-
出于某种原因,我没有看到您的其他评论...哦,好吧。是的,实际上有 35 个代码列和 35 个金额列。代码从 AA1 到 AA652 不等。而对于第二部分(添加几个代码),我需要添加 9 个代码:AA74、AA76、AA78 等等。
标签: sql sql-server-2008-r2 sum rows multiple-columns