MS SQL Server 2008 を使用して
いるテーブル名はtblDateTimeLogです。
ID INT(AI)
RecordID INT
DateLog DATE
TimeLog TIME
DetachmentCode INT
EntryDate DATETIME
IsDeleted BIT
UserID VARCHAR(50)
これを含むテーブルがあります:
RecordID | DateLog | TimeLog
11 | 2013-06-01 | 07:59:00
11 | 2013-06-01 | 19:01:00
11 | 2013-06-02 | 07:57:00
11 | 2013-06-02 | 19:03:00
11 | 2013-06-03 | 07:49:00
11 | 2013-06-03 | 19:11:00
14 | 2013-06-04 | 08:01:00
14 | 2013-06-04 | 19:03:00
14 | 2013-06-05 | 07:52:00
14 | 2013-06-05 | 19:02:00
1 つのレコード ID は、同じ DateLog に複数の TimeLog を持つことができます
今、私はそれを次のように表示したい:
列としての日付と、MIN(TimeLog) と MAX(TimeLog) の間の総時間数
RecordID | 2013-06-01 | 2013-06-02 | 2013-06-03 | 2013-06-04 | 2013-06-05
11 | 11:02:00 | 11:06:00 | 11:22:00 | NULL | NULL
14 | NULL | NULL | NULL | 11:02:00 | 11:10:00
Mikael's Answer によると、これは機能しますが、彼のクエリを理解しているので、これは MIN(TimeLog) を返します。
DECLARE @SQL NVARCHAR(MAX)
DECLARE @ColumnList NVARCHAR(MAX)
SELECT @ColumnList =
STUFF
(
(
SELECT DISTINCT ','+QUOTENAME(DateLog)
FROM TESTPIS.dbo.tblDateTimeLog
WHERE IsDeleted=0 AND DateLog >= '2013-06-15' AND DateLog <= '2013-06-30'
ORDER BY 1
FOR XML PATH('')
), 1, 1, ''
)
SET @SQL = 'SELECT P.RecordID, '+@ColumnList+'
FROM
(
SELECT RecordID, TimeLog, DateLog FROM TESTPIS.dbo.tblDateTimeLog WHERE isDeleted=0
) AS T
PIVOT
(
MIN(TimeLog) FOR DateLog IN ('+@ColumnList+')
) as P'
EXEC (@SQL)
返したいのはこんな感じDATEDIFF(MINUTES,MIN(TimeLog),MAX(TimeLog)
MIN(TimeLog)
クエリの をこれに置き換えてみました
SUM(DATEDIFF(MINUTES,MIN(TimeLog),MAX(TimeLog))
ただし、このエラーが発生しました
Incorrect syntax near '('.