>Perdona la mia ignoranza a riguardo, ho parecchia confusione
>a riguardo;
>non ho ben chiaro il with e funzione CRT che hai usato… ma in
>pratica e’ una query sulla tabella che hai creato…
Si esatto, le Common Table Expression (CTE) ti permettono di definire delle "viste temporanee" che puoi utilizzare nel comando di SELECT, INSERT, UPDATE o DELETE successivo.
Per maggiori info leggi il seguente paragrafo sui Books Online:
"WITH common_table_expression (Transact-SQL)"
http://msdn2.microsoft.com/en-us/library/ms175972.aspx
>io potrei fare rif. Alla tabella che ho ed usare la stessa query?
Certo, modificandola leggermente
>E [User]che cos’e’?
Un alias di colonna.
>non mi funziona ma se dovesse funzionare una volta ottenute le
>tre colonne con il totale delle ore, minuti, secondi e’ possibile
>riavere il totale tempo in un unica clonna?
Certo, guarda:
USE tempdb;
CREATE TABLE dbo.EngineerTime(
EngineerTimeID int NOT NULL PRIMARY KEY,
UserID int NOT NULL,
IssueID int NOT NULL,
StartTime datetime NOT NULL,
EndTime datetime NOT NULL
);
INSERT dbo.EngineerTime VALUES(30, 8, 92, '20070913 12:30:00', '20070913 13:30:00');
INSERT dbo.EngineerTime VALUES(31, 3, 87, '20070904 10:00:00', '20070904 12:00:00');
INSERT dbo.EngineerTime VALUES(32, 3, 87, '20070904 10:00:00', '20070904 12:00:00');
INSERT dbo.EngineerTime VALUES(33, 9, 92, '20070913 12:15:48', '20070913 14:45:48');
INSERT dbo.EngineerTime VALUES(34, 5, 92, '20070913 07:00:00', '20070913 10:00:00');
INSERT dbo.EngineerTime VALUES(35, 3, 98, '20070920 11:00:00', '20070920 11:00:00');
INSERT dbo.EngineerTime VALUES(37, 12, 100, '20071010 15:00:00', '20071010 15:45:00');
INSERT dbo.EngineerTime VALUES(38, 12, 100, '20071010 16:50:00', '20071010 17:15:00');
INSERT dbo.EngineerTime VALUES(39, 12, 100, '20071010 12:30:00', '20071010 13:15:00');
INSERT dbo.EngineerTime VALUES(40, 12, 106, '20071010 12:30:00', '20071010 13:15:00');
INSERT dbo.EngineerTime VALUES(41, 12, 106, '20071010 16:50:00', '20071010 17:15:00');
INSERT dbo.EngineerTime VALUES(42, 12, 106, '20071010 15:00:00', '20071010 15:45:00');
WITH CTE_SecondsPerUser(IssueID, Seconds) AS
(
SELECT IssueID, SUM(DATEDIFF(SECOND, StartTime, EndTime))
FROM dbo.EngineerTime
WHERE UserID = 12
GROUP BY IssueID
)
SELECT
IssueID
, RIGHT('0' + CAST(Seconds / 3600 AS varchar), 2) + ':' +
RIGHT('0' + CAST(Seconds / 60 % 60 AS varchar), 2) + ':' +
RIGHT('0' + CAST(Seconds % 60 AS varchar), 2) AS [Time]
FROM CTE_SecondsPerUser;
/* Output:
IssueID Time
----------- --------
100 01:55:00
106 01:55:00
(2 row(s) affected)
*/
DROP TABLE dbo.EngineerTime;
>grazie mille.
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org