2

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 '('.

4

2 に答える 2