1

在 SQL 中,只有当它符合我的条件时才可以选择一列?

IF p.Amount != 0.0 
    { select p.Amount from Price p } 

这是一个更大的 SQL 的一部分,如果值超过 0.0,将用于过滤列不显示

4

5 回答 5

4

SQL 标准用于选择行,而不是列。我通常发现总是为特定查询选择相同的列,然后选择是否使用视图逻辑显示它们会使生活变得更容易。

于 2013-01-18T13:42:15.587 回答
0

您需要使用该CASE语句。Transact-SQL - 案例

USE AdventureWorks2012;
GO
SELECT   ProductNumber, Category =
      CASE ProductLine
         WHEN 'R' THEN 'Road'
         WHEN 'M' THEN 'Mountain'
         WHEN 'T' THEN 'Touring'
         WHEN 'S' THEN 'Other sale items'
         ELSE 'Not for sale'
      END,
   Name
FROM Production.Product
ORDER BY ProductNumber;
GO
于 2013-01-18T13:42:21.420 回答
0

你想让它根本不可见吗?或者只是在其中显示一些其他预定义的值?因为如果您希望该列根本不出现,但仅在某些情况下,这是无法做到的。但是,您可以在列中返回不同的结果,如果它对您来说足够的话。在以下情况下使用案例:

SELECT 
  CASE WHEN p.amount< 700 THEN p.amount
ELSE 0
END
FROM Price p;
于 2013-01-18T13:51:56.110 回答
0

如果只想显示大于 0.0 的值,可以使用where子句:

select p.amount
from t
where p.amount > 0

如果要显示非正值,其余部分为空白(NULL),请执行以下操作:

select (case when p.amount > 0 then p.amount end)
from t

如果您只希望在所有值都大于零时返回行,那么这是一种方法:

select p.amount
from (select t.*,
             sum(case when p.amount > 0 then 1 else 0 end) over () as Pgt0
             count(*) over () as cnt
      from t
     ) t
where Pgt0 = cnt

如果你真的想在所有值都相同的情况下删除列,那么你需要一个更复杂的表达式。SQL SELECT 查询定义列并且没有动态可配置的列。

于 2013-01-18T15:51:14.607 回答
-1

您可以在 SQL Server 中使用 IFF 函数:

SELECT IIF(p.Amount != 0.0 ) as amount

FROM price p
于 2013-01-18T13:50:21.820 回答