2

Моя текущая таблица ниже:PIVOT запросов дает NULL значения

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 

Как достичь этого?

+2

Ваш запрос генерирует требуемый результат. [См. Здесь] (http://sqlfiddle.com/#!6/66665/1) – Amit

ответ

3

Как вы можете видеть из 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; 

enter image description here

Итак, я полагаю, вы извлекаете больше столбцов, то вы показали нам (и некоторые из них уникальны). Чтобы решить эту проблему, вы можете просто сделать это:

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]; 
+0

Да. Таблица содержит 20 столбцов. Благодарю. Ваш запрос работает нормально. – thevan

Смежные вопросы