2017-02-20 19 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投影。

相關問題