当我加入另一个表时,总和值会膨胀

时间:2017-05-12 20:21:34

标签: sql

我有两个返回我想要的结果集的查询,每个用户每天一行。问题是,当我尝试通过userid加入两个查询时,我得到了夸大的结果,因为用户每天都在表中多次。我如何加入他们并避免夸大结果呢?

**Query 1**

SELECT AAL.UserID
     , SUM(AAL.Dur)/60 AS 'LIM'
     , SUM(CASE When AAL.DUR = 'av' then AAL.Dur/60
                Else 0 END) AS 'AVAIL'
FROM WG
INNER JOIN AAL
   on WG.UserID=AAL.UserID
   and WG.SiteID=AAL.SiteID 
WHERE WG.WG = 'OP'
AND DATEDIFF(day,AAL.Date,GETDATE()) = 1
GROUP BY AAL.UserID


**Query 2**

SELECT R.UserID
     , SUM(CASE When R.StID = 4 then 1
                Else 0 End) AS 'Rf Ct'
FROM R
INNER JOIN WG
   on R.UserID = WG.UserID  
WHERE WG.WG = 'OP'
AND DATEDIFF(day,R.Date,GETDATE()) = 1
GROUP BY R.UserID


**JOIN ATTEMPT**

SELECT AAL.UserID
    , SUM(AAL.Dur)/60 AS 'LIM'
    , SUM(CASE When AAL.DUR = 'av' then AAL.Dur/60
               Else 0 END) AS 'AVAIL'
    , SUM(CASE When R.StID = 4 then 1
               Else 0 End) AS 'Rf Ct' 
FROM WG 
INNER JOIN AAL 
   on WG.UserID=AAL.UserID
   and WG.SiteID=AAL.SiteID
INNER JOIN R
   on AAL.UserID=R.UserID
WHERE WG.WG = 'OP'
AND DATEDIFF(day,AAL.Date,GETDATE()) = 1
GROUP BY AAL.UserID 

1 个答案:

答案 0 :(得分:0)

您未在查询中使用WB。因此,只需使用existsin

SELECT R.UserID, SUM(CASE When R.StID = 4 then 1 Else 0 End) AS 'Rf Ct'
FROM R 
WHERE DATEDIFF(day, R.Date, GETDATE()) = 1 AND
      EXISTS (SELECT 1 FROM WB WHERE R.UserID = WG.UserID AND WG.WG = 'OP') 
GROUP BY R.UserID;

您应该了解数字相乘的原因 - WG中的多行对应单个R.ID