我有一个包含 6 列的表,其中 int 值 AreaID 是外键。
B1 H1 F1 A1 U1 AreaID
0 3 -1 40 -1 120
34 7 -1 3 -1 120
我需要能够做的是获得一个选择语句,它将返回上述列的不同列表 WHERE AreaID = 120 但折扣任何值为 -1 的列
所以上面的例子会理想地返回以下列:B1、H1、A1、
有人可以帮我吗?
非常感谢
杰森
我有一个包含 6 列的表,其中 int 值 AreaID 是外键。
B1 H1 F1 A1 U1 AreaID
0 3 -1 40 -1 120
34 7 -1 3 -1 120
我需要能够做的是获得一个选择语句,它将返回上述列的不同列表 WHERE AreaID = 120 但折扣任何值为 -1 的列
所以上面的例子会理想地返回以下列:B1、H1、A1、
有人可以帮我吗?
非常感谢
杰森
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? 对于类似的东西。