2014-02-19 81 views
1

我需要計算每小時有多少人在工作。我有兩個表:根據另一個時間間隔更新表。 SQL Server

Hour  Men 
------------ 
6  0 
7  0 
8  0 
9  0 
10  0 
11  0 
12  0 

其中"Men"列是男性的數量。另一個表是:

ClockedInHour  ClockedOutHour 
6     10 
7     10 
8     12 
6     11 
9     12 

所以在第二個表中的每個條目,我需要增加在第一個表"Men""ClockedInHour""ClockedOutHour"包括那些在表之間每隔一小時,而且,如果可能的話,做它沒有光標。

附加條件:它將成爲表值函數的一部分。

在此先感謝您的幫助。

回答

1

解決了!

DECLARE @Hour6 INT 
SET @Hour6 = (SELECT COUNT(*) FROM @table2 where ClockedOutHour >= 6 and ClockedInHour <= 6) 
DECLARE @Hour7 INT 
SET @Hour7 = (SELECT COUNT(*) FROM @table2 where ClockedOutHour >= 7 and ClockedInHour <= 7) 
DECLARE @Hour8 INT 
SET @Hour8 = (SELECT COUNT(*) FROM @table2 where ClockedOutHour >= 8 and ClockedInHour <= 8) 
DECLARE @Hour9 INT 
SET @Hour9 = (SELECT COUNT(*) FROM @table2 where ClockedOutHour >= 9 and ClockedInHour <= 9) 
DECLARE @Hour10 INT 
SET @Hour10 = (SELECT COUNT(*) FROM @table2 where ClockedOutHour >= 10 and ClockedInHour <= 10) 
DECLARE @Hour11 INT 
SET @Hour11 = (SELECT COUNT(*) FROM @table2 where ClockedOutHour >= 11 and ClockedInHour <= 11) 
DECLARE @Hour12 INT 
SET @Hour12 = (SELECT COUNT(*) FROM @tc where ClockedOutHour >= 12 and ClockedInHour <= 12) 

UPDATE @table1 SET Man = @Hour6 WHERE Hour = 6 
UPDATE @table1 SET Man = @Hour7 WHERE Hour = 7 
UPDATE @table1 SET Man = @Hour8 WHERE Hour = 8 
UPDATE @table1 SET Man = @Hour9 WHERE Hour = 9 
UPDATE @table1 SET Man = @Hour10 WHERE Hour = 10 
UPDATE @table1 SET Man = @Hour11 WHERE Hour = 11 
UPDATE @table1 SET Man = @Hour12 WHERE Hour = 12 
0

您可以使用插入觸發器爲做到這一點:

Go --terminate all preceding batch of statements 

CREATE TRIGGER tg_MenCount ON dbo.table2 For INSERT 
AS 
SET XACT_ABORT, NOCOUNT ON 
--Ignore zero row updates, inserts 
IF NOT EXISTS (SELECT * FROM INSERTED) RETURN; 

BEGIN TRY 
    UPDATE T1 
    set T1.men = T1.men +1 
    FROM 
     table1 T1 
     INNER JOIN INSERTED I 
     ON T1.hour between I.ClockedInHour and I.ClockedOutHour 
END TRY 
BEGIN CATCH 
    IF XACT_STATE() <> 0 ROLLBACK TRANSACTION 
    --RAISERROR [rethrow caught error using @ErrorNumber, @ErrorMessage, etc] 
END CATCH 
GO 
+0

這應該是表值函數的一部分。你的代碼給我一個錯誤:「'CREATE TRIGGER'必須是查詢批處理中的第一條語句。」 –

+0

這是因爲您可能會在正在進行的批次中添加此定義。用Go語句終止該批次。 – Deepshikha

+0

在這種情況下,我沒有訪問先前聲明的表變量,它們代表來自原始文章 –

相關問題