【问题标题】:SQL Server Display only lines with all values not equal to 0SQL Server 仅显示所有值不等于 0 的行
【发布时间】:2014-09-08 17:36:29
【问题描述】:

在 SQL Server 2008r2 中,我只想显示某些列不等于“0”的行

例如:我只想显示第 2 列和第 3 列为 '0'

的行

第 1 行:val1 = 2,val2 = 2,val3 = 0

第 2 行:val1 = 1,val2 = 0,val3 = 0

第 3 行:val1 = 0,val2 = 0,val3 = 5

第 4 行:val1 = 10,val2 = 0,val3 = 3

第 5 行:val1 = 0,val2 = 0,val3 = 0

在本例中,我想显示第 1、3、4 行,但不显示第 2 和 5 行,因为第 2 列和第 3 列都是 = '0'

我尝试使用NOT EXISTS,但没有成功。

编辑: 嗨,我觉得我很难清楚地解释我想要什么,我向你提出了我的明确要求,也许你可以定义我的需求^^:

select * from CONSULTANT inner join REPORTINGCONSULTANT on CONSULTANT.ID = REPORTINGCONSULTANT.FK_CONSULTANT where [CONSULTANT].[ISDESACTIVE] = '0' and [CONSULTANT].[ISSUPPRIME] = '0' and [CONSULTANT].[INITIALES] not like 'IL%' and [REPORTINGCONSULTANT].[DATEDEBUT] >= '02/06/2014' and [REPORTINGCONSULTANT].[NBCANDIDATSPUSH] <> '0' and [REPORTINGCONSULTANT].[NBCVENVOYESURPOSTE] <> '0' and [REPORTINGCONSULTANT].[NBRDVPROSPECTS] <> '0' and [REPORTINGCONSULTANT].[NBRDVCLIENTS] <> '0' and [REPORTINGCONSULTANT].NBPROSPECTSRENCONTRES] <> '0' and [REPORTINGCONSULTANT].[NBPROSPECTSRENCONTRESBINOME] <> '0' and [REPORTINGCONSULTANT].[NBCLIENTSRENCONTRES] <> '0' and [REPORTINGCONSULTANT].[NBCLIENTSRENCONTRESBINOME] <> '0' 

当我只运行开头(在日期之后停止)时,我会计算 1700 个结果 如果我运行其余的,它算我 0 结果

但我可以找到所有行都为真的行

【问题讨论】:

  • 您是否尝试过使用where 子句?
  • 我不确定您的要求是否像示例中描述的那样简单。如果有更多案例,您可以附加到问题中。

标签: sql sql-server-2008-r2 filtering


【解决方案1】:

我只想显示第 2 列和第 3 列是 '0' 的行

我没有看到具体问题

SELECT t.* 
FROM dbo.TableName t
WHERE t.val2 <> 0 AND t.val3 <> 0

【讨论】:

  • 如果我尝试这样做,它不会显示 t.val1 = 0 和 t.val 0 的行
  • 您还没有提到val 的列。除此之外,您的要求是排除 t.val2t.val3 为 0 的行。我的 Where-clause 不排除第一列为 0 的行。
【解决方案2】:

sign(abs(x))计算不等于0的值的个数。

SELECT t.* 
FROM dbo.TableName t
WHERE sign(abs(val1))+sign(abs(val2))+sign(abs(val3)) >1

它实现了以下要求:

仅显示某些列不等于“0”的行

如果“some”表示 val2 和 val3,则可能是:

SELECT t.* 
FROM dbo.TableName t
WHERE sign(abs(val2))+sign(abs(val3)) >0

【讨论】:

  • abs 值的总和是我的解决方案 - 非常感谢
【解决方案3】:

您似乎要求根据您期望的结果集获取 val2 0 OR val3 0 的所有行。

SELECT TABLE.*  FROM TABLE WHERE val2 <> 0 OR val3 <> 0

【讨论】:

  • 我想以相同的方式拥有 val2 0 和 val3 0 但不排除只有一个 val 0
  • 如果你想得到 0 和一个值 0 的结果,那么你真的需要使用 OR。运行此查询,它将为您提供所需的结果集。
【解决方案4】:

除了 Tim Schmelter 的可能正确答案之外,您可能还要求使用 HAVING 子句。

他使用的WHERE 语句用于当您尝试过滤的值是表中的实际值或计算结果时。这可能就是您要寻找的内容,尽管您的问题非常模糊,很难说。

但是,有时人们很难过滤出对表执行的聚合结果,例如当您对某些值求和并希望排除总和等于该场景的那些值时。因此,如果您有以下查询:

SELECT SUM(someValue) AS val1, MAX(someOtherValue) AS val2, AVG(yetAnotherValue) AS val3
FROM someTable
GROUP BY someThing

你可以像这样过滤掉 val2 和 val3 都为零的地方:

SELECT SUM(someValue) AS val1, MAX(someOtherValue) AS val2, AVG(yetAnotherValue) AS val3
FROM someTable
GROUP BY someThing
HAVING MAX(someOtherValue) != 0 AND AVG(yetAnotherValue) != 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2018-08-07
    相关资源
    最近更新 更多