2009-05-11 5 views
0

Comment puis-je rejoindre (ou union) #Temp avec scr_SecuristLog Time. Regardez svp [Heure] colonneComment puis-je rejoindre #Temp avec la table sql?


CREATE TABLE #Temp (VisitingCount int, [Time] int) 

DECLARE @DateNow DATETIME,@i int,@Time int 
    set @DateNow='00:00' 
    set @i=1; 
    while(@i<48) 
     begin 
set @DateNow = DATEADD(minute, 30, @DateNow) 
set @Time = (datepart(hour,@DateNow)*60+datepart(minute,@DateNow))/30 
insert into #Temp(VisitingCount,[Time]) values(0,@Time) 
set @[email protected]+1 
end 





select Count(Page) as VisitingCount,[Time]  
from  
(SELECT Page,Date,[user],  
     (datepart(hour,Date)*60+datepart(minute,Date))/30 as [Time]   
     FROM scr_SecuristLog  
) scr_SecuristLog  
where  
     Date between '2009-05-04' and '2009-05-05'  

group by [Time] order by [Time] asc   
return 

Répondre

1

EDIT: Ajout de la clause GROUP BY aux alias de table requête interne et ajoutée à l'instruction SELECT

Voici ce que votre rejoindre la syntaxe pourrait ressembler à:

CREATE TABLE #Temp (VisitingCount int, [Time] int) 
-- 
-- 
-- Insert logic here 
-- 
-- 
select t.VisitingCount, t.[Time] 
from #Temp as t 
inner join (
    select count(page) as VisitingCount, (datepart(hour,Date)*60+datepart(minute,Date))/10 as [Time] 
    from scr_SecuristLog 
    where Date between '2009-05-04' and '2009-05-05' 
    group by Date 
) as s 
    on t.VisitingCount = s.VisitingCount 
     and t.Time = s.Time 
+0

Justin; Vos codes me donnent l'erreur: – Penguen

+0

Msg 8120, niveau 16, état 1, ligne 1 La colonne 'scr_SecuristLog.Date' n'est pas valide dans la liste de sélection car elle n'est contenue ni dans une fonction d'agrégat ni dans la clause GROUP BY. – Penguen

+0

Msg 8120, niveau 16, état 1, ligne 1 La colonne 'scr_SecuristLog.Date' n'est pas valide dans la liste de sélection car elle n'est contenue ni dans une fonction d'agrégat ni dans la clause GROUP BY. Msg 209, niveau 16, état 1, ligne 1 Nom de colonne ambiguë 'VisitingCount'. Msg 209, niveau 16, état 1, ligne 1 Nom de colonne ambiguë 'Time'. – Penguen

0

Étant donné que vous utilisez SQL 2005, au lieu de la table temporaire, vous pouvez utiliser une expression de table commune:

DECLARE 
    @date_start DATETIME, 
    @date_end DATETIME 

SET @date_start = '2009-05-04' 
SET @date_end = '2009-05-04' 

;WITH Times (start_time, end_time) AS 
(
    SELECT 
     @date_start AS start_time, 
     @date_start AS end_time 
    UNION ALL 
    SELECT 
     DATEADD(mi, 30, start_time) AS start_time, 
     DATEADD(mi, 30, end_time) AS end_time 
    FROM 
     Times 
    WHERE 
     end_time <= DATEADD(dy, 1, @date_end) 
) 
SELECT 
    start_time, 
    end_time, 
    COUNT(*) 
FROM 
    Times T 
INNER JOIN dbo.scr_SecuristLog SL ON 
    SL.date >= T.start_time AND 
    SL.date < T.end_time 
GROUP BY 
    start_time, 
    end_time 
Questions connexes