У меня есть следующие SQL таблицы:SQL Query - граф и список 0 вместо Null
структура базы данных & хотел выхода:
Любая идея, как запрос будет смотреться? Я также хотел бы поставить 0 вместо Null в случае, если результатов нет.
уш Stian
У меня есть следующие SQL таблицы:SQL Query - граф и список 0 вместо Null
структура базы данных & хотел выхода:
Любая идея, как запрос будет смотреться? Я также хотел бы поставить 0 вместо Null в случае, если результатов нет.
уш Stian
Так как вы закрепили types
, используйте статические Conditional Aggregate
select cast([Date] as Date),
count(case when type = 'Maintenance' then 1 end) as [Maintenance]
count(case when type = 'Fault' then 1 end) as [Fault]
count(case when type = 'Alarm' then 1 end) as [Alarm]
count(case when type = 'Critical Fault' then 1 end) as [Critical Fault]
From yourtable
Group by cast([Date] as Date)
Когда нет никакого особого type
для Date
тогда Count
агрегат будет возвращать 0
Чтобы поставить 0 вместо нулевого вам нужно только для этого ISNULL (Column_Name , 0) для числовых значений и IsNull (column_name, '0')
SELECT CAST([Date] AS DATE) Event_date
sum(Case when type = 'Maintenance' then 1 else 0 end) as Maintenance
,sum(Case when type = 'Fault' then 1 else 0 end) as Fault
,sum(Case when type = 'Alarm' then 1 else 0 end) as Alarm
,sum(Case when type = 'Critical Fault' then 1 else 0 end) as [Critical Fault]
FROM Table
GROUP BY Cast([Date] as Date)
ORDER BY Event_date
Я больше веера суммы здесь. Нет необходимости в объединении, поскольку 1+ или 0 всегда будут возвращаться, так как каждый столбец с поворотным столом будет иметь значение 0 или 1+.
DECLARE @table table (Date datetime NOT NULL, Type varchar(50) NOT NULL);
INSERT INTO @table
VALUES
('08.11.2016 14:23','Maintenance'),
('08.11.2016 10:45','Fault'),
('08.11.2016 10:44','Alarm'),
('08.11.2016 14:23','Critical Falut'),
('08.11.2016 14:23','Maintenance'),
('08.11.2016 10:45','Fault'),
('08.11.2016 10:44','Alarm'),
('08.11.2016 14:23','Critical Falut'),
('07.11.2016 14:23','Maintenance'),
('07.11.2016 10:45','Fault'),
('07.11.2016 10:44','Alarm'),
('07.11.2016 14:23','Maintenance'),
('07.11.2016 10:45','Fault'),
('07.11.2016 10:44','Alarm')
;
-- if the value contains a space don't for get to quote it with [] i.e. [Some Value]
SELECT Date = P.DateDay, P.Maintenance, P.Fault, P.Alarm, P.[Critical Falut]
FROM (
SELECT DateDay = CONVERT(date, Date), Date, Type
FROM @table
) AS T
PIVOT (COUNT(Date) FOR Type IN (Maintenance, Fault, Alarm, [Critical Falut])) AS P
;
Редактировать: Мне любопытно, почему это было отклонено, когда это точка опоры, которая точно отвечает на вопрос пользователей.
Какая СУБД вы используете? –
У вас есть только эти 4 типа событий? –
MS SQL Server 2008 –