sql - SELECT 与其他列值的条件不同

标签 sql sql-server tsql

我在此 SQL Fiddle 构建了架构如果你想尝试一下。

我有以下数据

AutoID         Apartment      Flag       Description
======         =========      ====       ===========
1              1              NO         Device 1
2              1              NO         Device 2
3              1              NO         Device 3
4              2              NO         Device 4
5              2              NO         Device 5
6              3              NO         Device 6
7              3              NO         Device 7
8              3              YES        Device 8
9              3              NO         Device 9 

我正在尝试使用以下规则获取数据

  1. 仅选择不同的公寓值(value)
  2. 如果标志为"is",则选择该项目作为不同值

因此,如果我运行 SQL 语句,我最终会得到

AutoID         Apartment      Flag       Description
======         =========      ====       ===========
1              1              NO         Device 1
4              2              NO         Device 4
8              3              YES        Device 8

我一直在尝试使用 OVER() 和 PARTITION BY 但运气不佳。非常感谢任何帮助或指导。

最佳答案

;WITH CTE AS
(
    SELECT  *,
            RN = ROW_NUMBER() OVER(PARTITION BY Apartment
                                   ORDER BY CASE WHEN [Flag] = 'YES' THEN 1 ELSE 2 END,
                                            [AutoID])
    FROM TableA
)
SELECT *
FROM CTE
WHERE RN = 1

Here is修改后的sqlfiddle

关于sql - SELECT 与其他列值的条件不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23766198/

相关文章:

mysql - 如何将这两个 SQL 语句合并为一个?

sql-server - 基于参数标志定义动态 IN 子句的正确方法是什么?

c# - 如何使用 c# 中的 MySQL 存储过程将表作为输入发送到存储过程?我有 T-SQL 工作

c# - 不留下未关闭的连接的正确方法是什么?

sql - 使用 postgresql 设计一个缓慢变化的维度类型 2 脚本

sql - 选择具有 MAX(Date) 的记录但没有获得不同的返回

php - MySQL 查询错误 12

.net - 无法将 .bak 文件复制到 docker 容器

sql-server - 为什么 Visual Studio 启动 localdb 以及如何停止它?

sql - 插入上一行