【问题标题】:SQL to select rows with certain condition based on status and countSQL根据状态和计数选择具有特定条件的行
【发布时间】:2018-05-14 16:11:52
【问题描述】:
ID  Foreign_ID  Number   Status_Id
1   101         xyz11    3
2   101         xyz22    3
3   201         xyz33    3
4   201         xyz44    1
5   201         xyz55    7
6   301         xyz66    1
7   301         xyz77    7
8   301         xyz88    7

Status_Id,3 表示激活,1 表示已取消,7 表示已撤销 我想选择只有 status_id 1 或 7 并且不应该有任何活动行的行。查询应该只返回具有 301 (Foreign_ID) 的行。

【问题讨论】:

  • oracle11g & sql-server-2012 ?
  • 一般来说,如果您首先尝试,您的问题会得到更好的答复。您是否编写过任何 SQL 来响应您的要求?
  • 它是针对sql-server 2012的。但一般来说是写一个sql查询。我确实尝试过这样的子句 select * from table have count(Foreign_ID) > 1 and status_Id in (1, 7)....但是迷路了..

标签: sql oracle11g sql-server-2012


【解决方案1】:

你可以试试下面的代码:

Select *
From Yourtablename
Where Status_Id in (1, 7)
AND Foreign_ID = 301;

【讨论】:

  • 我想要一个通用查询来获取所有符合条件的行
  • @Programmer 具有所有行条件的通用查询是什么意思?您能否指定输出中需要的列以及您要查找的确切条件?
【解决方案2】:

我必须承认,也许我还没有完全理解您的要求, 但这应该可行:

SELECT * FROM table WHERE (Status_Id=1 OR Status_Id=7) AND Foreign_ID=301

【讨论】:

  • 我举了一个例子。我想要一个通用查询来从表中获取只有 1、7 状态而不是 3 的外部 id 的所有行。在示例中,不应提取 101 和 201 行
【解决方案3】:

抱歉,我还不能发表评论。

如果我错了,请纠正我,你想查询status_id1或7然后你说你只想得到foreign_id301?

SELECT * FROM YOURTABLE WHERE Foreign_ID = 301

这将显示具有Foreign_ID = 301 的行

如果您只想显示带有Status_Id 1 或7 的Foreign_ID

SELECT Foreign_ID FROM YOURTABLE WHERE Status_Id IN (1, 7)

或者您的 301 Foreign_ID 也包含 Status_Id 1?对不起,我在你的陈述结束时迷路了,还有你的表格数据。

如果不是,Aurete的回答会满足你的条件。

【讨论】:

    【解决方案4】:

    使用not exists

    select * 
    from table t
    where not exists (
        select 1 from table where Foreign_ID = t.Foreign_ID and Status_Id = 3
    );
    

    这称为关联subquery,其中subquery 依赖于外部查询,如果外部查询表有3 行,则subquery 将执行3 次。

    在您的情况下,子查询具有带有status_id = 3 的过滤器,这意味着它将仅选择status_id = 3 的行,依此类推,外部查询具有NOT EXISTS 过滤器,这意味着它将选择status_id <> 3 的行。

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多