我有一张任务表。每个任务可以有多个版本(包括草稿版本)。
每个任务将共享一个guid
每个任务可以有多个版本
草稿由版本=0标记
我试图提出一个查询,将给我一个记录每项任务。
我应该总是得到任务的最高版本。
如果一个任务有一个草稿版本,我应该只看到它。
我无法控制表或数据的结构。
到目前为止,我正在尝试使用行数函数,但很难找到正确的解决方案。
declare @SWs TABLE
(
Guid nvarchar(36),
Version int,
Title nvarchar(50),
IsLatestVersion bit
)
INSERT INTO @SWs
select 'guid1', 1, 'StandardWork1', 1
union
select 'guid2', 1, 'StandardWork2', 0
union
select 'guid3', 1, 'StandardWork3', 1
union
select 'guid4', 1, 'StandardWork4', 1
union
select 'guid1', 0, 'StandardWork1(Draft)', 0
union
select 'guid5', 0, 'StandardWork5(Draft)', 0
union
select 'guid2', 2, 'StandardWork2.2', 1
--QUERY SHOULD RETURN ONLY ONE ROW PER GUID
--ALWAYS SHOW MAX VERSION UNLESS THERE IS DRAFT, THEN SHOW DRAFT
select
ROW_NUMBER() OVER(PARTITION BY Guid ORDER BY Version, IsLatestVersion desc) as Row#
,Guid
,Version
,Title
,IsLatestVersion
from @SWs
但这给了我一个结果:
这几乎是正确的,但是使用guid2的任务没有正确编号。因为它没有草稿,也有多个版本,所以我不能让版本2先出现。如果您对此问题有任何帮助,我们将不胜感激。
1条答案
按热度按时间8xiog9wr1#
我想您需要一个条件排序作为第一个标准来放置
version
是0
首先,然后对version
继续islatestversion
:db小提琴演示: