2016-11-08 11 views
0

SQLクエリ - 私は、次のSQLテーブルを持ってカウントし、リスト0の代わりに、ヌル

Data base structure & wanted output

どのようにクエリ任意のアイデア:

Basic structure

データベース構造&は、出力を望んでいました見えるだろうか?結果がない場合は、Nullの代わりに0を入れることもできます。

あなたは、typesを固定静的

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) 

Dateは特にtypeありませんConditional Aggregateその後、Count集計が返されます使用しておりますのでBR スティアン

+2

どのDBMSを使用していますか? –

+1

あなたはこれらの4種類のイベントしか持っていませんか? –

+0

MS SQL Server 2008 –

答えて

0

0

0

代わりに0を入れてあなたはこれを行うために必要なヌルの ISNULL(Column_Name 、0)数値とISNULL(列名、 '0')

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 

私はここで合計ファンです。ピボット列が0または1+の値を持つたびに、1+または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 
; 

編集:これは、ユーザーの質問に正確に答えるピボットのときに、なぜこれが投票されなかったのか不思議です。

関連する問題