【发布时间】:2021-09-24 18:14:09
【问题描述】:
我创建了一个查询来过滤数据。我只需要在最终语句中选择不同的 inv_mast_uid。如果相同的 inv_mast_uid 重复,我只需要选择 1 行。请推荐
with s1
as (select count(supplier_part_no)as count_of_duplicates,
supplier_part_no,
supplier_id,
inv.item_desc,
extended_desc
from p21_view_inventory_supplier supp
join p21_view_inv_mast inv
on supp.item_id = inv.item_id
where product_type = 'R'
and supp.delete_flag = 'N'
and inv.delete_flag = 'N'
and other_charge_item = 'N'
group by supplier_part_no,
supplier_id,
item_desc,
extended_desc
having count(supplier_part_no) > 1),
s2 as (select supp.inv_mast_uid,
inv.item_id,
supplier_id,
supplier_part_no,
item_desc,
extended_desc
from p21_view_inventory_supplier supp
left join p21_view_inv_mast inv
on supp.item_id = inv.item_id)
select s2.inv_mast_uid,
s2.item_id,
count_of_duplicates,
s1.supplier_part_no,
s1.supplier_id,
s1.extended_desc,
s1.item_desc
from s2
join s1
on s1.supplier_part_no = s2.supplier_part_no
where s1.supplier_id = s2.supplier_id
and s1.item_desc = s2.item_desc
and ( s1.extended_desc = s2.extended_desc
or s1.extended_desc is null
and s2.extended_desc is null )
结果是
预期结果:
希望只有第 1 行和第 2 行。不影响其他分组功能。
添加代码和相关输出。
【问题讨论】:
-
请显示样本数据和所需结果。请以一种可读的方式格式化您的查询 - 因为它是一堵毫无意义的文字墙。
-
你为什么把PLSQL标记为Oracle,以及SQL Server?
-
PL/SQL 是 Oracle 的方言,而不是 SQL Server 的方言。 SQL Server 使用 T-SQL。另外,您真的使用 2008 年吗? 2008 已经完全不受支持 2 年多了。
-
而且,正如@DaleK 所说,空格和换行符在编写时是一种非常宝贵的资源(我不仅仅指代码)。学会使用它。如果您的 单行 代码长度超过 1,500 个字符(您的代码长度为 1,539,包括空格),那么您已经 非常非常 错误。
-
我错过了什么吗? 'DISTINCT' 不能解决问题吗?
标签: sql sql-server tsql sql-server-2012