PIVOT 查询给出 NULL 值

PIVOT Query gives NULL values

我的实际table如下:

   DATE       Server           DURATION_
2015-04-01    BANGLR           01:11:00.0000000
2015-04-01    ERRAMANJIL       00:19:00.0000000
2015-04-01    THANE            00:42:00.0000000
2015-04-02    BANGLR           01:27:00.0000000
2015-04-02    ERRAMANJIL       00:20:00.0000000
2015-04-02    THANE            00:33:00.0000000

我正在使用以下 PIVOT 查询:

SELECT DATE, BANGLR, THANE, ERRAMANJIL FROM abrlmis_hmdmtracking
PIVOT (MAX(DURATION_) for [Server] IN (BANGLR,THANE,ERRAMANJIL)) AS [SERVER]
WHERE [DATE] IS NOT NULL 
GROUP BY DATE, BANGLR,THANE,ERRAMANJIL

但它给出的结果具有如下空值:

   DATE      BANGLR              THANE                   ERRAMANJIL
2015-04-01   01:11:00.0000000    NULL                    NULL
2015-04-01   NULL                NULL                    NULL
2015-04-01   NULL                NULL                    00:19:00.0000000
2015-04-01   NULL                00:42:00.0000000        NULL
2015-04-02   01:27:00.0000000    NULL                    NULL
2015-04-02   NULL                NULL                    NULL
2015-04-02   NULL                NULL                    00:20:00.0000000
2015-04-02   NULL                00:33:00.0000000        NULL

但我想要的结果是这样的:

   DATE      BANGLR             THANE              ERRAMANJIL
2015-04-01   01:11:00.0000000   00:42:00.0000000   00:19:00.0000000
2015-04-02   01:27:00.0000000   00:33:00.0000000   00:20:00.0000000

如何实现?

正如您从下面的 T-SQL 语句中看到的那样,您的查询在提供的数据下运行良好:

DECLARE @DataSource TABLE
(
    [DATE] DATE
   ,[Server] VARCHAR(12)
   ,[DURATION_] VARCHAR(18)
);

INSERT INTO @DataSource ([DATE], [Server], [DURATION_])
VALUES ('2015-04-01', 'BANGLR', '01:11:00.0000000')
      ,('2015-04-01', 'ERRAMANJIL', '00:19:00.0000000')
      ,('2015-04-01', 'THANE', ' 00:42:00.0000000')
      ,('2015-04-02', 'BANGLR', '01:27:00.0000000')
      ,('2015-04-02', 'ERRAMANJIL', '00:20:00.0000000')
      ,('2015-04-02', 'THANE', '00:33:00.0000000');

SELECT TOP 8 DATE, BANGLR, THANE, ERRAMANJIL 
FROM @DataSource
PIVOT 
(
    MAX(DURATION_) FOR [Server] IN (BANGLR,THANE,ERRAMANJIL)
) AS [SERVER]
WHERE [DATE] IS NOT NULL 
GROUP BY DATE, BANGLR,THANE,ERRAMANJIL;

因此,我相信您提取的列比您向我们展示的要多(其中一些是独一无二的)。要解决这个问题,您可以简单地执行以下操作:

SELECT TOP 8 DATE, BANGLR, THANE, ERRAMANJIL 
FROM 
(
    SELECT [DATE] 
          ,DURATION_
          ,[Server]
    FROM @DataSource
    WHERE [DATE] IS NOT NULL 
) DS
PIVOT 
(
    MAX(DURATION_) FOR [Server] IN (BANGLR,THANE,ERRAMANJIL)
) AS [SERVER];