根据值选择值

时间:2013-05-20 12:40:11

标签: sql

我有一个带有6个列的表,其中int值为AreaID,是Forigen Key。

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

我需要做的是获取一个将返回Distinct列表的select语句 以上列WHERE AreaID = 120 但打折任何值为-1的cols

所以上面的例子会理想地返回列: B1, H1, A1,

有人可以帮我吗?

非常感谢

杰森

1 个答案:

答案 0 :(得分: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?类似内容。