sql查询中出现错误

sql查询中出现错误,sql,Sql,我有一个疑问: ( SELECT SUM( CONVERT( FLOAT, CASE '01' WHEN '01' THEN CASE SIGN((sltr_tran_amt - ISNULL(sltr_matched_amt, 0)))

我有一个疑问:

(   SELECT 
        SUM(
            CONVERT(
                FLOAT, 
                CASE '01' 
                    WHEN '01' THEN 
                        CASE SIGN((sltr_tran_amt - ISNULL(sltr_matched_amt, 0)))
                            WHEN 1 THEN
                                CASE DBO.glas_aging_oth(CONVERT(DATETIME, '2009/04/04') - FLOOR(sltr_pstng_date))
                                    WHEN 0 THEN (sltr_tran_amt - ISNULL(sltr_matched_amt, 0))
                                    ELSE 0
                                END
                            ELSE 0
                        END
                    WHEN '02' THEN
                        CASE SIGN((sltr_tran_amt - ISNULL(sltr_matched_amt, 0)))
                            WHEN -1 THEN
                                CASE DBO.glas_aging_oth(CONVERT(DATETIME, '2009/04/04') - FLOOR(sltr_doc_date))
                                    WHEN 0 THEN (sltr_tran_amt - ISNULL(sltr_matched_amt, 0))
                                    ELSE 0
                                END
                            ELSE 0
                        END
                    END
            )
        ) 
    FROM
    WHERE
        CASE '01' 
            WHEN '01' THEN sltr_pstng_date
            ELSE sltr_doc_date
        END  = 
        CASE '01' 
            WHEN '01' THEN sltr_pstng_date
            ELSE sltr_doc_date
        END 
) thirty_days,
from glas_sl_transactions

当我执行这个查询时,在“where”附近发生了一个错误。我如何避免这种情况?如果可能的话,请告诉我如何缩短这个查询。

这个查询中间的某个地方,你有<>代码>从哪里-I.你在from .t/p>之后丢失了一个表名。 此外,由于“1”始终是“1”,因此可以在“1”之后删除所有的
大小写“1”,从而使其变短

编辑:好的,下面是我对它的重新格式化:

(   SELECT 
        SUM(
            CONVERT(
                FLOAT, 
                CASE '01' 
                    WHEN '01' THEN 
                        CASE SIGN((sltr_tran_amt - ISNULL(sltr_matched_amt, 0)))
                            WHEN 1 THEN
                                CASE DBO.glas_aging_oth(CONVERT(DATETIME, '2009/04/04') - FLOOR(sltr_pstng_date))
                                    WHEN 0 THEN (sltr_tran_amt - ISNULL(sltr_matched_amt, 0))
                                    ELSE 0
                                END
                            ELSE 0
                        END
                    WHEN '02' THEN
                        CASE SIGN((sltr_tran_amt - ISNULL(sltr_matched_amt, 0)))
                            WHEN -1 THEN
                                CASE DBO.glas_aging_oth(CONVERT(DATETIME, '2009/04/04') - FLOOR(sltr_doc_date))
                                    WHEN 0 THEN (sltr_tran_amt - ISNULL(sltr_matched_amt, 0))
                                    ELSE 0
                                END
                            ELSE 0
                        END
                    END
            )
        ) 
    FROM
    WHERE
        CASE '01' 
            WHEN '01' THEN sltr_pstng_date
            ELSE sltr_doc_date
        END  = 
        CASE '01' 
            WHEN '01' THEN sltr_pstng_date
            ELSE sltr_doc_date
        END 
) thirty_days,
from glas_sl_transactions
因此,看起来您在第一个结束括号之前的间隙中缺少了一个
结束
,该括号位于
FROM
上方

此外,它还包含许多永远不会执行的代码。例如

CASE '01' 
   WHEN '01' /* always executed */ 
   WHEN '02' /* never executed */ 
END
where子句也可以归结为
1=1
,因此可以删除

总之,我认为它应该是这样的

SELECT SUM( CONVERT(
    FLOAT, 
    CASE SIGN((sltr_tran_amt - ISNULL(sltr_matched_amt, 0)))
        WHEN 1 THEN
            CASE DBO.glas_aging_oth(CONVERT(DATETIME, '2009/04/04') - FLOOR(sltr_pstng_date))
                WHEN 0 THEN (sltr_tran_amt - ISNULL(sltr_matched_amt, 0))
                ELSE 0
            END
        ELSE 0
    END
)) 
from glas_sl_transactions

请格式化sql并使其更具可读性。您收到的确切错误消息是什么??