SELECT 与其他列值的条件不同

Posted

技术标签:

【中文标题】SELECT 与其他列值的条件不同【英文标题】:SELECT Distinct with condition of other column value 【发布时间】:2014-05-20 17:19:51 【问题描述】:

如果你想试试的话,我已经在 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 

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

    仅选择不同的 Apartment 值 如果标志为 YES,则选择该项目作为唯一值

所以如果我运行 SQL 语句,我最终会得到 ​​p>

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

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

【问题讨论】:

如果FLAGNO 然后我只显示一个值,例如在 2 号公寓中,两个标志都是 NO,我只显示带有 autoid 4 的那个。 【参考方案1】:
;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

【讨论】:

好的,太棒了,谢谢。我仍然需要等待 10 分钟才能接受这个答案......我应该问而不是在过去 1 小时内拔掉头发。 @Fylix 别担心,很高兴它有所帮助。另外,还没有必要急于接受答案【参考方案2】:

第一步 - 为每个组分配相同的公寓号的订单号

第二步 - 只选择第一步

select AutoID, Apartment, Flag, Description from (
select AutoID, Apartment, Flag, Description, row_number() over (partition by apartment order by Flag desc) rnum 
from table1)
where rnum = 1

【讨论】:

以上是关于SELECT 与其他列值的条件不同的主要内容,如果未能解决你的问题,请参考以下文章

有没有一种有效的方法来计算 Pandas 中的列值,使用基于其他列的条件值的前行的值?

Azure 表存储:是不是可以使用与添加两列值的结果进行比较的查询条件?

基于列值的条件连接

如何使用每个列值的窗口规范和连接条件?

基于组不变列值的条件分组

PySpark DataFrame 根据另一列中时间戳值的最小/最大条件更新列值