将单个 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)用法
在PL/SQL中 使用 case when 语句求两个条件合并统计的平均值