0

我有一个包含 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、

有人可以帮我吗?

非常感谢

杰森

4

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? 对于类似的东西。

于 2013-05-20T13:08:26.897 回答