2014-06-10 5 views
0

Ici, j'ai deux CTE et j'ai besoin de sélectionner les valeurs de ces deux CTE comme une seule requête. Je peux choisir des valeurs à partir d'un seul CTE à la fois mais je ne sais pas comment fusionner ces deux CTE et sélectionner les valeurs des deux CTE.combinant deux CTE dans une seule requête

Ici int la requête ci-dessous je peux en mesure de sélectionner des valeurs de la deuxième 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 

J'ai besoin de fusionner la requête ci-dessous au-dessus d'un

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

Toute suggestion?

Répondre

1

Si vous joindrez les valeurs de CTE1 et CTE2 en fonction de CHILDID colonne, vous pouvez écrire que:

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

Ici, je dois ajouter toutes les colonnes sélectionnées dans le groupe par liste de droite ?? – bala3569

+0

oh oui .. à droite .. je viens d'ajouter le pseudo code .. – Deepshikha