2017-02-20 3 views
-6

は、私はこのようなテーブルがあるとしていますSQL:表示する列のみの場合は、その中のデータ

name | age | experience 
abc | 18 | 0 
def | 19 | 0 
efg | 20 | 0 

私はいずれかの値がゼロよりも大きい場合にのみ経験の列を選択します。 この場合、私のSQLクエリは名前と年齢だけを返すようになり、経験は返されません。

"efg"が0より大きいとすると、クエリは名前、年齢、および経験値を返します。 次のクエリを試しました

SELECT EXISTS (SELECT name,age,experience FROM emp_info) 
    AND NOT 
    EXISTS (SELECT experience FROM emp_info WHERE experience=0); 

しかし、動作しません。

+0

より良い例を提供してください。 –

+0

どうしてうまくいかないのですか?また、少し混乱...経験> 0の場合は、経験の列だけを選択してください?経験値が0より小さい場合は他の2つの列を選択するので、経験値は0より大きい場合のみ表示されますか? – David

+0

MySQLまたはMS SQL ServerまたはOracleを使用していますか?関与していない製品にはタグを付けないでください。 – jarlh

答えて

1

これを試してください: -

IF ((select max(experience)FROM emp_info) > 0) 
    SELECT name,age,experience FROM emp_info 
ELSE 
    SELECT name,age FROM emp_info 
0

これは働くことがあります。

if(experience > 0) 
    begin 
    SELECT name,age,experience FROM emp_info 
    end 
else 
    begin 
    SELECT name,age FROM emp_info 
    end 
1

をほぼすべてのリレーショナルデータベースでは、あなたのクエリは、すべての列の数が同じ、つまり、列の固定番号を返す必要が行。だからあなたが求めているのは妥当ではない。ギザギザのテーブルのサポートのために、おそらくInformixで動作するようなものを手に入れることができますが、それは私が考えることができる唯一のものです。あなたのクエリでJSONにシリアル化、またはXMLを生成するが、それは、このための高度なビットだと、あなたが望むものであるクリアされていない含める必要があり

その他のオプション。

通常、これはフロントエンドで処理されますが、データベースクエリでは処理されません。

1
SELECT name, age, NULLIF(experience, 0) from emp_info 

あなたの質問は、結果に応じて、列の異なるセットを返すことは、あなたが何をしたいかもしれないので、あなたのコードからではなく、あなたのSQLプロジェクションから直接それを行うことができ一種の注意が必要です。

関連する問題