我有这个问题:
( 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'附近。我该如何避免这种情况?如果可能,请告诉我如何缩短此查询。
答案 0 :(得分:2)
在该查询的中间某处,您有FROM WHERE
- 即。你在FROM之后缺少一个表名。
此外,您可以通过删除所有CASE '1' WHEN '1' THEN
位来缩短它,因为“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
因此,在END
之上的第一个右括号之前,您似乎也错过了FROM
。{/ p>
此外,它包含许多永远不会执行的代码。例如。
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