Birden sola Alternatif yaklaşım katıldı

oy
0

Ben yoldan satışları saymaya aşağıdaki sorgu var

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 

Sonra 6 diğer sol geçerli ve önceki hafta, ay ve yılı saymak katılır var.

Bu yaklaşım çalışır, ancak bu daha etkin olup olmadığını birlikte bu verileri çekerek yolu (kod satırlarını açısından) merak ediyorum?

Oluştur 25/09/2017 saat 10:07
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
4

Ben sadece koşullu toplanmasına gerek:

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
Cevap 25/09/2017 saat 10:13
kaynak kullanıcı

oy
1

Sen koşullu agregasyonunu kullanabilir

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

koşullu toplama birçok durumda Tamam olabilir masanıza biri sıralı tarama yol açar. Alternatif bir çözüm arkasındaki alt sorgular kullanmaktır SELECTbazen olabilir daha etkili . Örneğin, küçük veri Alt Seç'i erişmek ve bunu desteklemek için dizinler oluşturur eğer.

Cevap 25/09/2017 saat 10:12
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more