我在此 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
我正在尝试使用以下规则获取数据
- 仅选择不同的公寓值(value)
- 如果标志为"is",则选择该项目作为不同值
因此,如果我运行 SQL 语句,我最终会得到 p>
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/