我有一个带有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,
有人可以帮我吗?
非常感谢
杰森
答案 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?类似内容。