2017-09-25 48 views
0

我有以下疑問的途徑替代方法進行多左聯接

SELECT DISTINCT q.sales_route, 
       y.yesterday, 
       t.today 
FROM tblquotesnew q 
     left join (SELECT tblquotesnew.sales_route, 
         Count(tblquotesnew.sales_route) AS Yesterday 
        FROM tblquotesnew 
        WHERE tblquotesnew.date_sent_to_registrations = 
         Trunc(SYSDATE - 1) 
         AND sales_route IS NOT NULL 
        GROUP BY tblquotesnew.sales_route) y 
       ON q.sales_route = y.sales_route 
     left join (SELECT tblquotesnew.sales_route, 
         Count(tblquotesnew.sales_route) AS Today 
        FROM tblquotesnew 
        WHERE tblquotesnew.date_sent_to_registrations = 
         Trunc(SYSDATE) 
         AND sales_route IS NOT NULL 
        GROUP BY tblquotesnew.sales_route) t 
       ON q.sales_route = t.sales_route 

計算銷售額,然後我還有其他6人加入到計算當前和以前的周,月,年。

這種方法確實有效,但我想知道這是否更有效(用代碼行的方式)將這些數據拉到一起?

回答

4

我想你只需要有條件聚集:

select q.sales_route, 
     sum(case when q.date_sent_to_registrations = trunc(SYSDATE - 1) 
       then 1 else 0 
      end) as yesterday, 
     sum(case when q.date_sent_to_registrations = trunc(SYSDATE) 
       then 1 else 0 
      end) as today 
from tblquotesnew q 
group by sales_route 
+0

精彩 - 謝謝! – user1936588

1

您可以使用條件聚集

SELECT sales_route, 
      sum(CASE WHEN date_sent_to_registrations = Trunc(SYSDATE) 
          AND sales_route IS NOT NULL 
        THEN 1 ELSE 0 END) today, 
      sum(CASE WHEN date_sent_to_registrations = Trunc(SYSDATE - 1) 
          AND sales_route IS NOT NULL 
        THEN 1 ELSE 0 END) yesterday 
FROM tblquotesnew 
GROUP BY sales_route 

有條件的聚集會導致你的表的順序掃描,這可能在許多情況下是好的。另一種解決方案是使用SELECT後面的子查詢,有時可能是more efficient。例如,如果您訪問較小的數據子查詢,並且可以創建索引來支持它。