2014-06-10 58 views
0

這裏我有兩個CTE,我需要從這兩個CTE中選擇一個值作爲單個查詢。我可以一次從單個CTE中選擇值,但我不知道如何合併這兩個CTE和從兩個CTE中選擇值。在一個查詢中合併兩個CTE

這裏詮釋下面的查詢,我可以能夠從第二CTE

DECLARE @now DateTime;    
DECLARE @Firstweekstart DateTime;   
DECLARE @FirstweekEnd DateTime;   

SET @now = CONVERT(datetime, CONVERT(date,getdate()));  

SET @Firstweekstart = DATEADD(    
       DD,    
       -(DATEPART(DW, @now - 7) - 1),    
       @now - 7);    

       SET @Firstweekstart = dateadd(ms, -1, @Firstweekstart)  

SET @Firstweekend = DATEADD(    
       DD,    
       7 - (DATEPART(DW, @now - 7)),    
       @now - 7);   

       SET @Firstweekend = dateadd(ms, -3, @Firstweekend+1)  




;WITH CTE1 AS    
     (    
     SELECT CHINFO.CHILDID,CHINFO.CONSUMERID,    
     DATEADD(DD, -(DATEPART(DW, CHINFO.Adddate)-1), CHINFO.Adddate) AS APPLICATIONUSAGESTARTDATE,    
     DATEDIFF(WW,CHINFO.Adddate,@now) AS WEEKNUMBER,    
        ROW_NUMBER() OVER    
        (PARTITION BY CHINFO.CHILDID ORDER BY CHINFO.Adddate ASC) AS RN    
     FROM BKA.CHILDINFORMATION CHINFO    
     LEFT OUTER JOIN BKA.CHILDEVENTS CHE    
     ON CHE.CHILDID = CHINFO.CHILDID 
     GROUP BY CHINFO.CHILDID,CHINFO.CONSUMERID,CHINFO.Adddate    
    )    


,CTE2 as 
(SELECT Distinct CHINFO.CHILDID ,CHE.TIMESTAMP 
    ,ROW_NUMBER() OVER (PARTITION BY CHINFO.CHILDID ORDER BY CHE.TIMESTAMP) row 
FROM BKA.CHILDINFORMATION CHINFO    
     JOIN BKA.CHILDEVENTS CHE    
     ON CHE.CHILDID = CHINFO.CHILDID 
     WHERE CHE.TYPE = 'pottybreak' 
     AND CHE.ADDDATE BETWEEN @Firstweekstart AND @Firstweekend 
     GROUP BY CHINFO.CHILDID,CHE.TIMESTAMP 
     ) 
SELECT 
    a.CHILDID , 
    AVG(CONVERT(DECIMAl,DATEDIFF (minute , b.TIMESTAMP , a.TIMESTAMP))) as CURRENTWEEKTIMERRESTART 
FROM 
    CTE2 a 
    LEFT JOIN CTE2 b 
    on a.CHILDID = b.CHILDID 
    and a.row = b.row+1 
    group by a.childid 

我需要合併上述一個

SELECT CTE1.CONSUMERID,    
        CTE1.CHILDID,  
        CTE1.APPLICATIONUSAGESTARTDATE,    
        CTE1.WEEKNUMBER 
     FROM CTE1    
WHERE RN = 1 ORDER BY CTE1.CHILDID ASC 

任何建議下面的查詢中選擇值?

回答

1

如果您是基於CHILDID列,那麼你可以寫爲從CTE1CTE2加盟值:

SELECT 
    CTE1.CONSUMERID, 
    CTE1.CHILDID, 
    CTE1.APPLICATIONUSAGESTARTDATE, 
    CTE1.WEEKNUMBER, 
    -- a.CHILDID , 
    AVG(CONVERT(DECIMAl,DATEDIFF (minute , b.TIMESTAMP , a.TIMESTAMP))) 
    as CURRENTWEEKTIMERRESTART 
FROM 
    CTE2 a 
    LEFT JOIN CTE2 b on a.CHILDID = b.CHILDID and a.row = b.row+1 
    LEFT JOIN CTE1 on CTE1.CHILDID = a.CHILDID and CTE1.RN = 1 
    group by CTE1.CONSUMERID,CTE1.CHILDID,CTE1.APPLICATIONUSAGESTARTDATE,CTE1.WEEKNUMBER 
    ORDER BY CTE1.CHILDID ASC 
+0

在這裏,我需要通過列表添加所有選定列該組中的權利? – bala3569

+0

哦,是的..對..我只是添加了僞代碼.. – Deepshikha