0

我正在尝试加快存储过程,并有以下子查询:

    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 语句或其他东西,但不太确定如何编写它。

我问这个是因为我读到最好尽量减少子查询以提高性能。

4

2 回答 2

3

尝试在以下情况下使用 CASE:

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] 
于 2013-05-10T18:52:36.787 回答
0

您可以尝试对 SQL Server 使用 oracle "UNION" 等效项。我曾在 Oracle 10g 上工作过,您可以像这样使用,

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

我不确定这是否对您有帮助...!无论如何...

于 2013-05-10T18:59:22.310 回答