如何解决每个条件返回一条记录
我正在努力寻找一种解决方案,以使每个条件获得一个记录。 在所附示例中,我希望每个“ nbr”获得一条记录。 我已经开始了,但是我找不到我需要的东西。
SELECT t2.*,CASE
WHEN t2.duplicate_flag=1 AND (t2.country=t2.country_active OR t2.country=t2.country_inactive) THEN 1 ELSE t2.duplicate_flag END nbr_match
FROM
(SELECT t1.*,CASE d.duplicate WHEN 1 THEN 1 ELSE 999 END duplicate_flag
FROM [Sheet1$] t1
JOIN
(SELECT nbr,COUNT(*) as duplicate
FROM [Sheet1$]
GROUP BY nbr) d
ON t1.nbr=d.nbr) t2
正如我所说,我希望每个“ nbr”获得一条记录。 如果每个“ nbr”有一个记录,则可以,将其标记为“ 1”。对于其他重复的(count(*)> 1),我将标记为“ 99”,然后根据条件修改这些“ 99”以获得一条记录。 这些规则是我必须遵循的规则,以便每个“ nbr”获得一条记录:
1. IF "country"="country_active" return me that row (per "nbr")
2. ELSEIF "country"="country_inactive" return me that row
3. If I have two the same countries between the "country" and the "country_active" THEN look at the MAX "expiration_date_active" OR MAX "expiration_date_inactive" and return me that record.
4. IF there is no match between "country"<>"country_active" AND "country"<>"country_inactive" return the column with the MAX date either from "expiration_date_active" OR "expiration_date_inactive"
预先感谢您的帮助。
原始数据:
解决方法
这是否提供您期望的结果?
WITH ListOfNbr AS (SELECT DISTINCT nbr FROM [Sheet1$])
SELECT t2.*
FROM ListOfNbr t1
CROSS APPLY (
SELECT TOP 1 *
FROM [Sheet1$]
WHERE nbr = t1.nbr
ORDER BY
CASE WHEN country = country_active THEN 1 ELSE 0 END DESC,CASE WHEN country = country_inactive THEN 1 ELSE 0 END DESC,expiration_date_active DESC,expiration_date_inactive DESC
) t2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。