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

将单个case语句应用于sql中的所有列,sql,oracle,Sql,Oracle,我需要得到表中每列的总和。所以我使用了selectsum(col1),col2等等 如果总和为null,则需要得到0,否则为总和的值。所以我使用了“当sum(col1)为null时选择case,然后0否则sum(col1)结束为sum_col1” 我的表中大约有40个这样的列。我需要在我的查询中写40次“case when sum(coln)then…”吗 我正在研究oracle9g。 谢谢 我的表中大约有40个这样的列。我需要写“案例”吗 当求和(n列)然后…“40次在我的查询 简短回答:是的

我需要得到表中每列的总和。所以我使用了selectsum(col1),col2等等

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

我的表中大约有40个这样的列。我需要在我的查询中写40次“case when sum(coln)then…”吗

我正在研究oracle9g。 谢谢

我的表中大约有40个这样的列。我需要写“案例”吗 当求和(n列)然后…“40次在我的查询

简短回答:是的


更详细的回答:您可以使用某种动态SQL从列元数据自动生成语句。但这可能不值得麻烦,因为您通常可以在查询编辑器中轻松地复制粘贴语句。综合考虑,如果一个表有40列需要求和,则表明数据模型设计不好。在使用设计糟糕的数据模型时,您需要在查询时付出代价…

旁注:
NVL(SUM(…),0)
应该可以为您节省一些输入时间。这是一个很好的提示:)谢谢..@jeroen:如果我希望结果是一个空字符串而不是0,我可以给出nvl(col1,,)?当我尝试此操作时,我再次得到“null”。nvl能返回一个空字符串吗?我对甲骨文不是很精通,所以如果你的问题还没有通过阅读和阅读得到回答,请把它作为一个单独的问题。