2009-05-11 7 views
0

#Tempをscr_SecuristLog Timeに結合(または結合)する方法はありますか? [時間]列喜ば#Tempと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 

答えて

1

EDITを見て:内側のクエリにGROUP BY句を追加し、追加されたテーブルの別名をSELECT文

にここにあなたが参加するものです構文は次のようになります。

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

ジャスティン;それは、集計関数またはGROUP BY句に含まれていないため、1つの 列「scr_SecuristLog.Date」は、選択リストに無効である – Penguen

+0

メッセージ8120、レベル16、状態1、行:あなたのコードは私にエラーを与えます。それは、集計関数またはGROUP BY句に含まれていないため – Penguen

+0

メッセージ8120、レベル16、状態1、1 列「scr_SecuristLog.Date」行は、選択リストでは無効です。 メッセージ209、レベル16、状態1、行1 あいまいな列名 'VisitingCount'。 メッセージ209、レベル16、状態1、行1 曖昧な列名 'Time'。 – Penguen

0

SQL 2005を使用しているので、テンポラリテーブルの代わりに、共通のテーブル式を使用することができます。

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 
関連する問題