3

私はこの問題に数日間取り組んでいます。私はオラクルデータベースを持っています。問題は1 回のクエリで解決する必要があります。No Function, Pocedure, ... 選択したい。彼が結果を出したら、投稿してください。それ以外の場合は、「空の結果」が必要です。

select case 
when count(*) = 0    
then 'no Entry'   
else MAX(Member)--all Members should be here 
END as Member 
from tableMember 
where Membergroup = 'testgroup'; 

問題は、Oracle が else による Aggregat 関数を必要としていることです。したがって、結果が「エントリなし」でない場合、値は 1 つだけ取得されます。すべての値が必要です。

私を助けてくれる人は誰でも大歓迎で、私を幸せにしてくれます。

4

5 に答える 5

5

何を達成しようとしているのかわからない、おそらくこれ

 select member from tablemember where Membergroup = 'testgroup'
union 
 select  'no Entry' 
 from dual 
 where NOT EXISTS ( select member from tablemember where membergroup = 'testgroup')
;
于 2012-08-17T10:33:52.933 に答える
4

2 つの集計クエリは必要ありません。null かどうかを確認するだけmax(member)で済みます。何が起こっているのかを明確にするために、このようにします。

select case when max_member is null then 'no entry' else max_member end as member
  from ( select max(member) as max_member
           from tablemember
          where membergroup = 'testgroup'
                )

ただし、すべてのメンバーを返したい場合は、次のようにすることができます。

select member
  from tablemember
 where membergroup = 'testgroup'
 union all
select 'no entry'
  from dual
 where not exists ( select 1 from tablemember where membergroup = 'testgroup')
于 2012-08-17T10:26:29.457 に答える
1

空のセットのクエリを使用してクエリを実行RIGHT JOINすると、常に 1 つの行が取得され、クエリがデータを返す場合はすべての行が取得されます。これは、データの複数回のスキャンを必要としないため、UNIONまたはUNION ALLを使用する場合よりも安価 (高速) です。NOT EXISTS

SELECT nvl(a.member,b.member) member
   FROM (SELECT member FROM tablemember WHERE membergroup='????') a
   RIGHT JOIN (SELECT 'no Entry' member FROM dual) b ON 1=1;

テスト環境:

DROP TABLE tablemember;
CREATE TABLE tablemember AS
   (
      SELECT TO_CHAR(level) member
         , DECODE(mod(level, 5), 0, 'testgroup', 'othergroup') membergroup
      FROM dual CONNECT BY level <= 50
   );
于 2012-08-17T12:50:50.320 に答える
0

目標を達成するために、いくつかの集計関数と NVL を使用できます。

MIN('VALUE 1') AS p1、MIN('VALUE 2') AS p2 FROM DUAL WHERE 1=0

このクエリの結果: NULL、NULL

次に、空の値を目的の文字列に置き換えます。

SELECT 
    NVL(MIN('1'), 'empty  value 1') AS p1, 
    NVL(MIN('STRING VALUE'), 'empty value 2')  AS p2,
    NVL(MIN((select 'subquery result' from dual)), 'empty subquery result') as p3
FROM 
    DUAL 
WHERE 
    1=0

ただし、フィールドに数字と文字列を混在させることはできません。

于 2013-03-21T05:25:35.247 に答える
-2

これを試して:

DECLARE C INTEGER;

SELECT COUNT(*) INTO C FROM tableMember WHERE Membergroup = 'testgroup';

IF C > 0

THEN

    SELECT * FROM tableMember;

ELSE

    SELECT 'No results!' FROM tableMember;

END IF;
于 2012-08-17T11:23:12.353 に答える