2013-05-20 171 views
0

我有一個包含6列的int表,其中int值是AreaI是Forigen鍵。基於值選擇值

B1 H1 F1 A1 U1 AreaID 
    0 3 -1 40 -1 120 
    34 7 -1 3 -1 120 

我需要什麼,能夠做的就是讓一個SELECT語句會返回一個獨特的名單上面列 WHERE areaID表示= 120 但打折任何的cols爲-1

值所以,上面的例子在理想情況下返回列: B1, H1, A1,

任何人可以幫助我嗎?

非常感謝

傑森

+1

我想說,最好是返回所有列,並在代碼中用'-1'來丟棄它們。 –

回答

0
SELECT DISTINCT 
    NULLIF(B1, -1) AS B1, 
    NULLIF(H1, -1) AS H1, 
    NULLIF(F1, -1) AS F1, 
    NULLIF(A1, -1) AS A1, 
    NULLIF(U1, -1) AS U1 
FROM 
    MyTable 
WHERE 
    AreaID = 120 

要放棄-1值,你必須將其更改爲別的東西。你不能忽略SQL中的列,只能掩蓋它們。在我的SQL中,DISTINCT忽略-1值。

所以我們假設其中一個H1行有-1,您仍然需要將它包含在不是-1的行中。所以要做到這一點,你必須在客戶端做到這一點。除非你的意思是「忽略任何行中存在-1的任何列」,否則這根本不是SQL。再次,這是客戶端處理

tl:dr:SQL不允許動態列。除非你想使用動態SQL

另外請參閱SQL exclude a column using SELECT * [except columnA] FROM tableA?的相似之處。

+1

感謝gbn,您的解決方案爲我工作。我調整了一下,但它的工作。我會在客戶端打折NULLS。非常感謝 – Jason