0

クエリに問題があります。

このクエリは、過去5週間のデータを取得します。

select z.week,
sum(case when i.severity=1 then 1 else 0 end) as 1
sum(case when i.severity=2 then 1 else 0 end) as 2
sum(case when i.severity=3 then 1 else 0 end) as 3
sum(case when i.severity=4 then 1 else 0 end) as 4
from instance as i
and left outer join year as z on convert(varchar(10),z.date,101)=convert(varchar(10),i.created,101)
and left outer join year as z on convert(varchar(10),z.date,101)=convert(varchar(10),i.closed,101)
where i.group in '%Tools%'
and z.year=2013
and z.week<=6 and z.week>1

ここでは、インスタンステーブルに数週間あり、1行もありません。したがって、ここではnullまたはゼロを取得していません...代わりに、行全体がまったくプロンプトを表示していません。

私の現在の出力。

week | 1 | 2 | 3 | 4 
---------------------
2  | 0 | 1 | 8 | 5
4  | 2 | 3 | 4 | 9
5  | 1 | 0 | 0 | 0

しかし、私は以下のような出力が必要です...

week | 1 | 2 | 3 | 4 
---------------------
2  | 0 | 1 | 8 | 5
3  | 0 | 0 | 0 | 0
4  | 2 | 3 | 4 | 9
5  | 1 | 0 | 0 | 0
6  | 0 | 0 | 0 | 0

私の質問は、インスタンステーブルに存在しない行のゼロを取得する方法です。これについては親切にガイドしてください。

4

1 に答える 1

0

左ではなく右に結合する必要があるようです。式の列 1 に存在するデータが必要であるが、それが結合式の RIGHT になる場合は、それを右結合に含めるか、from 句を書き直して最初に含める必要があります。

編集:簡単な例を使用した結合の簡単な例を次に示します。

declare @Z table ( dt date, value int);

insert into @Z values ('3-1-2013', 10),('3-4-2013',20);

declare @Y table (dt date, value int);

insert into @Y values ('3-1-2013', 5),('3-3-2013', 30);

select * from @Z  -- @Z table as is
select * from @Y  -- @Y table as is

select *
from @Z z
    inner join @Y y on z.dt = y.dt  -- I only get the values that they both exist on

select *
from @Z z
    left outer join @Y y on z.dt = y.dt  -- I get the values of @Z table regardless if @Y exists or not

select *
from @Z z
    right outer join @Y y on z.dt = y.dt  -- I get the values of @Y table regardless if @Z exists or not, I flipped my logic

select *
from @Z z
    full outer join @Y y on z.dt = y.dt  -- I get all the values of @Z table and @Y regardless of matching rules
于 2013-03-04T20:08:13.550 に答える