【问题标题】:Filter the data from the SQL Query从 SQL 查询中过滤数据
【发布时间】:2020-03-02 20:16:47
【问题描述】:

在下表中,我需要从表中排除CategoryID=1002Gender='KIDS'记录并返回其他记录。

+------+--------+
|  ID  | Gender |
+------+--------+
| 1001 | MENS   |
| 1002 | MENS   |
| 1001 | WOMENS |
| 1002 | WOMENS |
| 1001 | KIDS   |
| 1002 | KIDS   |
+------+--------+

预期结果:

+------+--------+
|  ID  | Gender |
+------+--------+
| 1001 | MENS   |
| 1002 | MENS   |
| 1001 | WOMENS |
| 1002 | WOMENS |
| 1001 | KIDS   |
+------+--------+

【问题讨论】:

  • 你尝试了什么?有没有尝试过使用WHERE 子句?
  • 我试过了,但我想在单个查询中使用它
  • 用and运算符添加多个条件

标签: sql sql-server tsql filtering


【解决方案1】:

您可以使用CASE 表达式作为

SELECT *
FROM
(
  VALUES
  (1001,    'MENS'),
  (1002,    'MENS'),
  (1001,    'WOMENS'),
  (1002,    'WOMENS'),
  (1001,    'KIDS'),
  (1002,    'KIDS')
) T(Id, Gender)
WHERE CASE WHEN ID = 1002 AND Gender = 'KIDS' THEN 1 ELSE 0 END = 0;

Online Demo

【讨论】:

    【解决方案2】:

    我不建议在where 子句中使用case 表达式,因为这会影响优化器。

    这很容易表达为布尔逻辑:

    where not (CategoryID = 1002 and Gender = 'KIDS')
    

    或:

    where CategoryID <> 1002 or Gender <> 'KIDS'
    

    【讨论】:

      猜你喜欢
      • 2015-09-15
      • 2022-06-16
      • 2014-09-23
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多