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,但运气不佳。非常感谢任何帮助或指导。
【问题讨论】:
如果FLAG
是NO
?
然后我只显示一个值,例如在 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 中的列值,使用基于其他列的条件值的前行的值?