SQL Server 2008 Pivot Query - PullRequest
       5

SQL Server 2008 Pivot Query

1 голос
/ 18 января 2012

У меня есть данные в таблице SQL Server 2008, которые выглядят так:

enter image description here

Я хочу повернуть их так:

enter image description here

В основном я хочу сгруппировать по ReadTime и Coater, а затем развернуть по столбцу DataType.Может ли кто-нибудь помочь мне с T-SQL сделать это?

1 Ответ

6 голосов
/ 18 января 2012

Может быть, это поможет:

Данные испытаний:

DECLARE @tbl TABLE
(
    ReadTime DATETIME,
    Coater VARCHAR(100),
    Value FLOAT,
    DateType VARCHAR(100)
)
INSERT INTO @tbl VALUES('2012-10-01 13:28:01','PBG11A-COATER',1,'FCDAOpside473')
INSERT INTO @tbl VALUES('2012-10-01 13:28:01','PBG11A-COATER',1,'FCDABackside473')
INSERT INTO @tbl VALUES('2012-10-01 13:28:01','PBG11A-COATER',0,'FCDAOpside472')
INSERT INTO @tbl VALUES('2012-10-01 13:28:01','PBG11A-COATER',0.9,'FCDABackside472')
INSERT INTO @tbl VALUES('2012-10-01 13:28:01','PBG11B-COATER',1,'FCDAOpside473')
INSERT INTO @tbl VALUES('2012-10-01 13:28:01','PBG11B-COATER',2,'FCDABackside472')
INSERT INTO @tbl VALUES('2012-10-01 13:28:01','PBG11B-COATER',2.9,'FCDAOpside472')
INSERT INTO @tbl VALUES('2012-10-01 13:28:01','PBG11B-COATER',0,'FCDABackside473')

INSERT INTO @tbl VALUES('2012-10-01 13:28:41','PBG11A-COATER',1,'FCDAOpside473')
INSERT INTO @tbl VALUES('2012-10-01 13:28:41','PBG11A-COATER',1,'FCDABackside473')
INSERT INTO @tbl VALUES('2012-10-01 13:28:41','PBG11A-COATER',0,'FCDAOpside472')
INSERT INTO @tbl VALUES('2012-10-01 13:28:41','PBG11A-COATER',0.9,'FCDABackside472')
INSERT INTO @tbl VALUES('2012-10-01 13:28:41','PBG11B-COATER',1,'FCDAOpside473')
INSERT INTO @tbl VALUES('2012-10-01 13:28:41','PBG11B-COATER',2,'FCDABackside472')
INSERT INTO @tbl VALUES('2012-10-01 13:28:41','PBG11B-COATER',2.9,'FCDAOpside472')
INSERT INTO @tbl VALUES('2012-10-01 13:28:41','PBG11B-COATER',0,'FCDABackside473')

Запрос:

SELECT
    *
FROM
(
    SELECT 
        ReadTime,
        Coater, 
        DateType,
        Value
    FROM @tbl AS tbl
) AS SourceTable
PIVOT
    (
        MIN(Value)
        FOR DateType IN 
                     (
                        [FCDAOpside472], 
                        [FCDAOpside473], 
                        [FCDABackside472], 
                        [FCDABackside473]
                     )
    )AS PivotTable
 ORDER BY 
    ReadTime
...