-2

利用できるテーブルは1つだけです。グレードと、その従業員がそのグレードを記録した回数を表示したいのですが、その従業員のレコードがない場合は、グレードに0を表示する必要があります。2つのテーブルが存在する場合に左結合を使用してこれを行う方法を知っていますが、テーブルは1つしかありません。

これはどのように可能ですか?

例:
TABLE

empID |  dept  |  grade
 1    |   11   |    a
 2    |   11   |    a
 3    |   11   |    b
 1    |   22   |    c
 2    |   22   |    f
 3    |   22   |    d
 1    |   33   |    a
 2    |   33   |    a
 3    |   33   |    a

たとえば、実行するSELECT grade, count(grade) from table where empID = 1 Group by grade;と、従業員が取得した成績とカウントのみが印刷されます。ここで、従業員が持っていなかった成績の0も印刷したいと思います。

4

3 に答える 3

3

私はあなたがこれを求めていると思いますか?

SQL> select e.grade, count(e2.empid)
  2         from (select distinct grade from e) e
  3              left outer join e e2
  4                           on e2.grade = e.grade
  5                          and e2.empid = 1
  6        group by e.grade
  7        order by grade;


G COUNT(E2.EMPID)
- ---------------
a               2
b               0
c               1
d               0
f               0

または、「e」グレードの行がないため、グレードと呼ばれるルックアップテーブルがある場合:

SQL> select * from grade;

G
-
a
b
c
d
e
f

SQL> select e.grade, count(e2.empid)
  2    from grade emp
  3          left outer join emp e2
  4                       on e2.grade = e.grade
  5                      and e2.empid = 1
  6    group by e.grade
  7    order by grade;

G COUNT(E2.EMPID)
- ---------------
a               2
b               0
c               1
d               0
e               0
f               0
于 2012-11-12T21:22:47.977 に答える
1

値を選択するためのクエリが次のようになっているとします。

select value from tbl;

tbl t に行がない場合は、確実に 0 が返されるようにすることができます。

   select nvl(t.value, 0) value
     from dual d
left join tbl t on 1=1;
于 2012-11-12T20:50:33.600 に答える
0

NVL関数が必要なようです。NVL を使用すると、値が null の場合に条件付きで代替値を返すことができます。ドキュメントを参照してください。

したがって、次のものがあれば...

SELECT fooName, fooNumber FROM foo

これらはあなたの結果でした

fooName, fooNumber
Blah, 1
Asdf, null
Qwer, 3
poiu, null

このようにクエリを書き直すことができます...

SELECT fooName, NVL(fooNumber, 0) FROM foo

結果は次のようになります...

fooName, fooNumber
Blah, 1
Asdf, 0
Qwer, 3
poiu, 0

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions105.htm

于 2012-11-12T20:50:38.083 に答える