SampleID | MemberId | MemberType | Status | ExpDate
1 | 222 | AA | Active | NULL
2 | 222 | AA | Pending | NULL
3 | 222 | AA | Cancelled | 2014-06-04 13:35:04.267
4 | 333 | AA | Pending | NULL
5 | 333 | AA | Cancelled | 2014-06-04 13:35:04.267
6 | 444 | AA | Cancelled | 2014-06-04 13:35:04.267
在上表中,会员ID 222有3行,有多个状态,如Active,Pending和Cancelled
如果MemberId
有更多的那个状态我需要先订购Active,然后是Pending,并且最后取消。即使并非所有状态值都存在,订单也应该成立。
答案 0 :(得分:0)
我建议您使用子状态使用案例作为状态,并将状态附加一个数字为1.活动,2。待定,3。取消,因为它们不是按字母顺序排列,然后您可以对状态执行最大操作得到你想要的东西。
Lidia D.
答案 1 :(得分:0)
有一个解决方案,但可能是某种程度上是沉闷的
如果你可以更新你的表,以便首先将状态与数字连接起来,这取决于它的优越性
SampleID MemberId MemberType Status ExpDate
1 222 AA 3Active NULL
2 222 AA 2Pending NULL
3 222 AA 1Cancelled 2014-06-04 13:35:04.267
4 333 AA 2Pending NULL
5 333 AA 1Cancelled 2014-06-04 13:35:04.267
6 444 AA 1Cancelled 2014-06-04 13:35:04.267
现在您可以通过选择最大(状态)
进行分组select memberid, right(max(status),len(max(status))-1)
from yourtable
group by memberid
P.S。您可以使用case语句来更新状态列,以便在开头
中汇总数字答案 2 :(得分:0)
在ORDER BY类中尝试将ROW_NUMBER()与CASE一起用于Status
:
SELECT * FROM
(
SELECT T.*,
ROW_NUMBER() OVER (PARTITION BY MemberID
ORDER BY CASE Status
WHEN 'Active' THEN 1
WHEN 'Pending' THEN 2
WHEN 'Cancelled' THEN 3
END ) as RN
FROM T) as T1
WHERE RN=1