2016-03-30 15 views
0

Rapor için yapmaya çalıştığım bir select ifadem var. Verileri ve ihtiyaç duyduğum her şeyi almam var ama fark ettim ki grubu kullanmam gerektiğinden, bir tabloda bulunmayan satırları bırakıyor. Bunu nasıl durdurabilirim veya çalışmasını sağlayabilirim.Kasa sql çalışmıyor

SELECT Sum(CASE WHEN direction = 'I' THEN 1 ELSE 0 END) InBound, 
     Sum(CASE WHEN direction = 'O' THEN 1 ELSE 0 END) OutBound, 
     Sum(CASE WHEN direction = 'I' THEN p.duration ELSE 0 END) InBoundTime, 
     Sum(CASE WHEN direction = 'O' THEN p.duration ELSE 0 END) OutBoundTime, 
     u.fullname, 
     (CASE 
      WHEN EXISTS (SELECT g.goalamount 
         FROM [tblbrokergoals] AS g 
         WHERE (g.goaldate BETWEEN 
           '2016-03-21' AND '2016-03-27')) 
     THEN 
      g.goalamount 
      ELSE 0 
     END) AS GoalAmount 
FROM [tblphonelogs] AS p 
     LEFT JOIN [tblusers] AS u 
       ON u.fullname = p.phonename 
     LEFT OUTER JOIN [tblbrokergoals] AS g 
        ON u.fullname = g.brokername 
WHERE (calldatetime BETWEEN '2016-03-21' AND '2016-03-27') 
     AND (u.userid IS NOT NULL) 
     AND (u.direxclude <> '11') 
     AND u.termdate IS NULL 
     AND (g.goaldate BETWEEN '2016-03-21' AND '2016-03-27') 
GROUP BY u.fullname, 
      g.goalamount; 

Bu çalışır ve kullanıcı sadece sayfaları sonuç olarak o satırı siler komisyoncu hedefleri değilken kullanıcı, BrokerGoals olduğunu ancak tüm verileri yakalar. Kullanıcı, bu değeri 0 olarak ayarlamak için brokergoals tablosunda bulunmadığında veya satır silinmediği için nasıl alabilirim? senin broker varsa, bir brokers tablo o zaman left join

SELECT b.broker_id, .... 
FROM brokers b 
LEFT JOIN .... ALL YOUR OTHER TABLES 
.... 
GROUP BY b.broker_id, .... 

için kullanabilirsiniz varsa

+0

Sorun, bir aditional 'LEFT JOIN''e ihtiyacınız var. Sadece birkaç dakika önce neredeyse aynı soruyu cevapladım. Bu yardımın http://stackoverflow.com/a/36317252/3470178 –

+0

veritabanında yeni bir tablo oluşturmak için izinlerim olmadığını bildirin. Zaman zaman kullanıcılar broker hedefleri vardır bazen onlar ofiste olup olmadığına bağlı değil ama onlar broker hedefleri bir değer yoksa hala o 0 göstermelidir. –

cevap

0
SELECT u.FullName, 
    SUM(CASE WHEN Direction = 'I' THEN 1 ELSE 0 END) AS InBound, 
    SUM(CASE WHEN Direction = 'O' THEN 1 ELSE 0 END) OutBound, 
    SUM(CASE WHEN Direction = 'I' THEN p.Duration ELSE 0 END) InBoundTime, 
    SUM(CASE WHEN Direction = 'O' THEN p.Duration ELSE 0 END) OutBoundTime, 
    CASE WHEN EXISTS (
     SELECT g.GoalAmount 
     FROM [Portal].[dbo].[tblBrokerGoals] AS g 
     WHERE g.GoalDate BETWEEN '2016-03-21' AND '2016-03-27' 
      AND u.FullName = g.BrokerName 
    ) THEN (
     SELECT g.GoalAmount 
     FROM [Portal].[dbo].[tblBrokerGoals] AS g 
     WHERE g.GoalDate BETWEEN '2016-03-21' AND '2016-03-27' 
      AND u.FullName = g.BrokerName 
    ) ELSE '0' END AS GoalAmount 
FROM [Portal].[dbo].[tblUsers] AS u 
LEFT JOIN [Portal].[dbo].[tblPhoneLogs] AS p 
    ON u.FullName = p.PhoneName 
WHERE u.UserID IS NOT NULL 
    AND u.DirExclude <> '11' 
    AND u.TermDate IS NULL 
    AND p.CallDateTime BETWEEN '2016-03-21' AND '2016-03-27' 
GROUP BY u.FullName 

kullanmak sorunumu düzeltmek için. Ben deyimi Var olduğunda Kılıfı eklendi ve ardından açıklamada takdirde 0

0

yinelenen isimler daha sonra bu yaptığım sona erdi budur

SELECT b.broker_id, .... 
FROM (SELECT DISTINCT broker_id 
     FROM brokers) b 
LEFT JOIN .... ALL YOUR OTHER TABLES 
.... 
GROUP BY b.broker_id, .... 
+0

Bu ne de değişti ve hala brokergoals tablosunda brokergoals tablosunda bulunmayan satırlardan kurtulduktan sonra grup –

+0

tarafından seçildi ve select case deyiminde düzeltildim sonra da select deyimini yapmak zorunda kaldım ve bunun için 0 iş. –

+0

Ardından hata başka bir yerdedir. Diğer soruyu söylediğim gibi, seçimlerdeki agregasyonları kaldırın ve sadece "GROUP BY" ile aynı değerleri kullanın, orada satırlar göreceksiniz –

0

Eğer mevcutsa (g AS NEREDE (g [tblbrokergoals] GELEN g.goalamount SEÇ (VAKA değiştirilmesi denediniz olan seçme başka yaptılar. '2016-03-21' VE '2016-03-27')) SONRA g.goalamount BAŞKA 0 END) zaten bu tarihten durum var olarak GoalAmount oLARAK sadece g.goalamount için ARASINDAKİ goaldate fıkra

İlgili konular