【发布时间】:2018-05-16 10:38:51
【问题描述】:
我使用行数来返回匹配 1 或 2 的值。我需要保持所有值等于 2。但是,根据我正在尝试的列名,一些行数为 1 的值是相同的过滤。我正在寻找的是一种保留计数为 2 的行但仅在行计数为 2 时才排除计数为 1 的行的方法。在下面的示例中,我返回相同的 salesorder ID 为 528886,但想排除该行,因为它有第 2 行。
查询:
select * from (
select *, ROW_NUMBER() over (partition by SalesOrderPostedID
Order By SalesOrderPostedID) as RowNumber
from cte5) c
Where SalesOrderPostedID=528886
and c.RowNumber=1
Union all
select * from (
select *, ROW_NUMBER() over (partition by SalesOrderPostedID
Order By SalesOrderPostedID) as RowNumber
from cte5) c
Where SalesOrderPostedID=528886
and c.RowNumber=2
我已附上结果。
Gorgon 提供的解决方案稍作修改。下面的查询返回计数为一或二的所有行或计数仅为一的任何行。
选择 c.* 从(选择 cte5., row_number() over(按 SalesOrderPostedID 分区 按销售订购OrderPostedID ) 作为行号, count() 超过(按 SalesOrderPostedID 分区)为 cnt 从 cte5 ) C 其中(行号 = 2 或 cnt = 1);
【问题讨论】:
-
你能提供样本数据和想要的结果吗?我真的无法理解解释。
标签: sql duplicates union common-table-expression