你既不希望游标也不希望/然后为此。相反,您将使用一系列自连接来获得这些结果。我也将使用一个CTE来简化获取最大迭代的每一步:
with StatusIterations As
(
SELECT quotID, MAX(itration) Iteration, QStatus
FROM table_NAME_A
GROUP BY quotID, QStats
)
select q.quotID, coalesce(sold.Iteration,rev.Iteration,asngd.Iteration) Iteration,
coalesce(sold.QStatus, rev.QStatus, asngd.QStatus) QStatus
from
--initial pass for list of quotes, to ensure every quote is included in the results
(select distinct quotID from table_NAME_A) q
--one additional pass for each possible status
left join StatusIterations sold on sold.quotID = q.quotID and sold.QStatus = 'sold'
left join StatusIterations rev on rev.quotID = q.quotID and rev.QStatus = 'Inreview'
left join StatusIterations asngd on asngd.quotID = q.quotID and asngd.QStatus = 'assigned'
如果您有等同于数值的状态的表,可以进一步对这个改善:
表:状态
QStatus Sequence
'Sold' 3
'Inreview' 2
'Assigned' 1
和代码变为:
select t.quotID, MAX(t.itration) itration, t.QStatus
from
(
select t.quotID, MAX(s.Sequence) As Sequence
from table_NAME_A t
inner join Status s on s.QStatus = t.QStatus
group by t.quotID
) seq
inner join Status s on s.Sequence = seq.Sequence
inner join table_NAME_A t on t.quotID = seq.quotID and t.QStatus = s.QStatus
group by t.quoteID, t.QStatus
上面看起来可能看起来很复杂,但它可以更快,并且可以在不更改代码的情况下轻松扩展超过三种状态。
堆栈溢出不是一个代码写入服务;你需要展示你到目前为止已经尝试了什么,哪些没有成功。就目前而言,这只是一个没有显示的努力的要求。 – LittleBobbyTables 2014-10-16 14:31:45
您使用的是什么RDBMS? – 2014-10-16 14:32:28
我正在使用sql server managment studio,换句话说tsql。非常感谢您的快速周转 – 2014-10-16 14:35:51