2016-01-12 18 views
-1

У меня есть эти данные.Как сгруппировать по SQL Server

 
Server | Server Address | Site | Timeslot  | Status | 
    X  www.X.example.com 1A 1/11/16 10:00AM Critical 
    X  www.X.example.com 1A 1/11/16 10:01AM Critical 
    X  www.X.example.com 1A 1/11/16 10:02AM Critical 
    Y  www.Y.example.com 1A 1/11/16 10:01AM  OK 
    Y  www.Y.example.com 1A 1/11/16 10:02AM  OK 
    Y  www.Y.example.com 1A 1/11/16 10:03AM  OK 
    X  www.X.example.com 2A 1/11/16 10:01AM Critical 
    X  www.X.example.com 2A 1/11/16 10:02AM Critical 
    X  www.X.example.com 2A 1/11/16 10:03AM Critical 
    Y  www.Y.example.com 2A 1/11/16 10:01AM  OK 
    Y  www.Y.example.com 2A 1/11/16 10:02AM  OK 
    Y  www.Y.example.com 2A 1/11/16 10:03AM  OK 
    X  www.X.example.com 1A 1/12/16 10:31AM  OK 
    X  www.X.example.com 1A 1/12/16 10:32AM  OK 
    X  www.X.example.com 1A 1/12/16 10:33AM  OK 
    Y  www.Y.example.com 1A 1/12/16 10:31AM Critical 
    Y  www.X.example.com 1A 1/12/16 10:32AM Critical 
    Y  www.X.example.com 1A 1/12/16 10:33AM Critical 
    X  www.X.example.com 2A 1/12/16 10:31AM  OK 
    X  www.Y.example.com 2A 1/12/16 10:32AM  OK 
    X  www.Y.example.com 2A 1/12/16 10:33AM  OK 
    Y  www.Y.example.com 2A 1/12/16 10:31AM Critical 
    Y  www.Y.example.com 2A 1/12/16 10:32AM Critical 
    Y  www.Y.example.com 2A 1/12/16 10:33AM Critical 

И мне нужно подсчитать количество CRITICAL на одном сервер и разделить его с другим сайтом и выделить какое время сервер стала критическим. Нравится это.

 
Server | S-1A Critical | Timeslot  | S-2A Critical | Timeslot  | 
    X   3   1/11/16 10:00AM   3   1/11/16 10:00AM 
    Y   3   1/12/16 10:30AM   3   1/12/16 10:30AM 

Кто-то помочь мне с этим .. я уже прошел через различные вопросы здесь относительно об этих проблемах. но я не совсем понимаю. Ваш отзыв очень ценится.

+0

Зачем вам нужны 2 столбца Timeslot в вашем окончательном наборе результатов? – Sunil

+0

Он хочет вывести столбец «Узел» по столбцу мудрый, сгруппированный по строке в поле «Сервер», и это значение - это MIN TimeSlot, который стал поворотным сайтом. –

+0

Есть только 2 значения для сайта ('1A' & '2A') или более? – Quantumplate

ответ

0

ни одного случая заявления:

WITH Crits AS 
(
    SELECT Server, Site, MIN(Timeslot) As Timeslot, COUNT(*) As SiteCount 
    FROM [table] 
    WHERE Status = 'Critical' 
    GROUP BY Server,Site 
) 
SELECT coalesce(c1.Server, c2.Server) Server, 
     c1.SiteCount As [S-1A Critical], 
     c1.Timeslot as [S-1A TimeSlot], 
     c2.SiteCount As [S-2A Critical], 
     c2.Timeslot as [S-2A Timeslot] 
FROM 
(SELECT SERVER FROM Crits WHERE Site = '1A' GROUP BY Server) c1 
FULL JOIN 
(SELECT SERVER FROM Crits WHERE Site = '2A' GROUP BY Server) c2 
    ON c2.Server = c1.Server 
0

Вы могли бы попробовать что-то вроде этого ...

select 
    Server, 
    SUM(CASE WHEN Site = '1A' AND Status = 'Critical' THEN 1 ELSE 0 END) as 'S-1A Critical', 
    MIN(CASE WHEN Site = '1A' AND Status = 'Critical' THEN Timeslot ELSE GETDATE() END) as Timeslot1A, 
    SUM(CASE WHEN Site = '2A' AND Status = 'Critical' THEN 1 ELSE 0 END) as 'S-2A Critical', 
    MIN(CASE WHEN Site = '2A' AND Status = 'Critical' THEN Timeslot ELSE GETDATE() END) as Timeslot2A 
from TableName 
group by Server 

Это предполагает, что существует только два значения для сайта и временной интервал всегда меньше, чем GETDATE().

0

Используйте запрос, как показано ниже. Я предполагаю, что ваше имя таблицы Servers.

SELECT Server, 
    SUM(case when Site = '1A' and Status= 'Critical' then 1 ELSE 0 END) as [S-1A Critical], 
    MIN (case when Site = '1A' and Status= 'Critical' then Timeslot end) as [S-1A TimeSlot], 
    SUM(case when Site = '2A' and Status= 'Critical' then 1 ELSE 0 END) as [S-2A Critical],  
    MIN (case when Site = '2A' and Status= 'Critical' then Timeslot end) as [S-2A TimeSlot] 
from Servers group by Server; 
+0

У вас есть опечатки в вашем ответе (ESLE), Site = 1 должно быть = '1A ', и ваш SUM подсчитывает как критический, так и ОК. – Quantumplate

+0

@Quantumplate, спасибо. Я просто исправлю это. – Sunil

+0

ha, я тоже оставил его с собой! – Quantumplate

0

Я бы просто сделать что-то вроде этого, хотя это не точно такой же формат, как ваш пример выхода:

SELECT 
    Server, 
    Site, 
    NumCriticals = COUNT(*), 
    Timeslot = MAX(Timeslot) 

FROM Servers 

WHERE Status = 'Critical' 

GROUP BY Server, Site 
ORDER BY Server, Site; 

Хотя, у меня есть чувствуя, что вам нужны только перечисленные серверы в настоящее время критический, чего этого не будет.

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