sql - 计算列的这种语法有什么问题?

标签 sql sql-server

ALTER TABLE table_1
ADD [calc_column]  AS
 (
        CASE 
        WHEN ([payment_1] IS NULL   
            AND [payment_2] IS NULL 
            AND [payment_3] IS NULL   
            AND [payment_4] IS NULL 
            AND [payment_5] IS NULL 
            AND [payment_6] IS NULL)  
         THEN NULL 
         ELSE (COALESCE([payment_1],(0)) + COALESCE([payment_2],(0)) +
           CASE
           WHEN (COALESCE([payment_3],(0)) + COALESCE([payment_7],(0)) + COALESCE([payment_4],(0)) > COALESCE([payment_5],(0)))
           THEN (COALESCE([payment_1],(0)) + COALESCE([payment_4],(0)) + COALESCE([payment_3],(0)))
           ELSE (COALESCE([payment_8],(0)))  END) AS DECIMAL(13,2)

最佳答案

有多个错误,主要是由于括号不平衡和 case 缺少 end 造成的。此外,您不需要指定类型。

所以,我认为这会起作用:

ALTER TABLE table_1
   ADD [calc_column] AS (CASE WHEN [payment_1] IS NULL AND  
                                   [payment_2] IS NULL AND
                                   [payment_3] IS NULL AND
                                   [payment_4] IS NULL AND
                                   [payment_5] IS NULL AND
                                   [payment_6] IS NULL
                              THEN NULL 
                              ELSE COALESCE([payment_1], 0) + COALESCE([payment_2], 0) +
                                    (CASE WHEN COALESCE([payment_3], 0) + COALESCE([payment_7], 0) + COALESCE([payment_4], 0) > COALESCE([payment_5], 0)
                                          THEN COALESCE([payment_1], 0) + COALESCE([payment_4], 0) + COALESCE([payment_3], 0)
                                          ELSE COALESCE([payment_8], 0) 
                                     END)
                         END);

关于sql - 计算列的这种语法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43711828/

相关文章:

sql-server - SQL Server死锁清晰度?

mysql - EXISTS 行数

mysql - 在连接查询中设置表名

sql - 显示根据参数按周或月分组的 SSRS 报告上的数据

调用存储过程时.NET READPAST 锁定错误

sql - 对象名称无效 'Table_2'

sql-server - 获取两个日期之间的月、年格式的所有季度

sql - Oracle中如何根据上一行的计算结果通过CASE语句动态计算?

php - 看起来 SQL 的 WHERE 子句和 JOIN 不能一起工作

mysql - TIMESTAMPDIFF 用于不止一种类型