我正在编写一个SQL查询,其中返回的一些列需要根据很多条件进行计算.

我目前正在使用嵌套的case语句,但它越来越混乱.有没有更好(更有条理和/或可读性)的方法?

(我正在使用Microsoft SQL Server,2005)


一个简单的例子:

SELECT
    col1,
    col2,
    col3,
    CASE
        WHEN condition 
        THEN
            CASE
                WHEN condition1 
                THEN
                    CASE 
                        WHEN condition2
                        THEN calculation1
                        ELSE calculation2
                    END
                ELSE
                    CASE 
                        WHEN condition2
                        THEN calculation3
                        ELSE calculation4
                    END
            END
        ELSE 
            CASE 
                WHEN condition1 
                THEN 
                    CASE
                        WHEN condition2 
                        THEN calculation5
                        ELSE calculation6
                    END
                ELSE
                    CASE
                        WHEN condition2 
                        THEN calculation7
                        ELSE calculation8
                    END
            END            
    END AS 'calculatedcol1',
    col4,
    col5 -- etc
FROM table

推荐答案

你可以试试某种结合的技巧,例如:

SELECT COALESCE(
  CASE WHEN condition1 THEN calculation1 ELSE NULL END,
  CASE WHEN condition2 THEN calculation2 ELSE NULL END,
  etc...
)

Sql相关问答推荐

从列中提取子字符串的ORDER BY CASE语句

从结果SQL查询中排除空值

PostgreSQL-按距离阈值挤压相邻行的性能

如何在多列上编写具有不同条件的查询?

当active=1时,是否可以创建id为的唯一索引?

同时插入和更新记录

获取主表条目,其中最新的辅助条目是 6 个月前

如何根据 SQL 中的阈值标记一个集群中的所有值?

错误:postgresql 中缺少表评级的 FROM 子句条目

删除每个不同日期中未 Select 的最短最长时间

按公司和产品查询最近发票的平均价格的SQL查询

如何在sparksql查询中使用日期值?

Snowflake中的动态SQL优化

PostgreSQL分割字符串为子词并判断其是否存在于其他字符串中

为重复的项目编号显示正在处理

将有效数字作为 varchar 返回的 SQL 函数

使用 regexp_replace 替换所有出现的特殊字符

连续期间的缺口

以 15 分钟为间隔的使用情况SQL 查询

从不同的表中 Select 包含单词列表的记录