我正在尝试加速存储过程,并具有以下子查询:
SELECT
...
ISNULL((SELECT Table1.Order WHERE Table2.STATUS <> 'R'),0) AS 'Order',
ISNULL((SELECT Table1.Order WHERE Table2.STATUS = 'R'),0) AS 'Reject',
...
FROM Table1
LEFT JOIN
Table2
ON Table1.KEY=Table2.KEY
有没有办法更有效地编写上述内容?
我在想一个IF声明或其他什么,但不太确定如何写它。
我问这个是因为我读到最小化子查询以提高性能是好的。
答案 0 :(得分:3)
尝试使用CASE WHEN:
SELECT
/* ... */
[Order] = CASE
WHEN t2.STATUS <> 'R' THEN t1.[Order]
ELSE 0
END,
Reject = CASE
WHEN t2.STATUS = 'R' THEN t1.[Order]
ELSE 0
END
/* ... */
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.[KEY] = t2.[KEY]
答案 1 :(得分:0)
您可以尝试使用与SQL Server等效的oracle“UNION”。我曾经使用过Oracle 10g,你可以使用like,
SELECT Table1.Order
FROM Table1, Table2
WHERE Table2.STATUS <> 'R' and Table1.id=Table2.id
UNION or UNION ALL
SELECT Table1.Order
FROM Table1, Table2
WHERE Table2.STATUS = 'R' and Table1.id=Table2.id
我不确定这是否对你有帮助...... !!反正...