将单个 case 语句应用于 sql 中的所有列

Posted

技术标签:

【中文标题】将单个 case 语句应用于 sql 中的所有列【英文标题】:Apply a single case statement to all columns in sql 【发布时间】:2015-01-16 23:46:05 【问题描述】:

我需要获取表格每一列的总和。所以我使用了 select sum(col1),col2 等。

如果总和为空,我需要得到 0,否则总和的值。所以我使用了“当 sum(col1) 为 null 时选择 case 然后 0 else sum(col1) end as sum_col1”。

我的表中有大约 40 个这样的列。我是否需要在我的查询中写 40 次“当 sum(col n) 然后...”的情况?

我正在开发 oracle 9 g。 谢谢

【问题讨论】:

旁注:NVL(SUM(...), 0) 应该可以节省一些打字时间。 不错的小费.. :) 谢谢.. @jeroen:如果我希望结果是空字符串而不是 0,我可以给 nvl(col1, '') 吗?当我尝试这个时,我再次得到'null'。 nvl 可以返回空字符串吗? 我不太精通 Oracle,所以如果您的问题尚未通过阅读 the NVL documentation 和 this question 得到解答,请单独提出这个问题。 【参考方案1】:

我的表中有大约 40 个这样的列。我需要写“案例”吗 当 sum(col n) then..." 在我的查询中出现 40 次?

简短回答:是的。

更长的答案:您也许可以使用某种动态 SQL 从列元数据自动生成语句。但这可能不值得麻烦,因为您通常可以轻松地将语句复制粘贴到查询编辑器中。考虑到所有因素,有一个包含 40 列的表需要求和,这表明数据模型设计不佳。使用设计不佳的数据模型时,您会在查询时付出代价...

【讨论】:

以上是关于将单个 case 语句应用于 sql 中的所有列的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript Switch语句 - 单个案例中的同义词

SQL中的条件判断语句(case when zhen if,ifnull)用法

如何使用 SQL 中的 Case 语句将数据插入临时表

在PL/SQL中 使用 case when 语句求两个条件合并统计的平均值

在 where 子句 SQL 中的 case 语句中使用参数

SQL Server:CASE 语句中的 OR 语句