此信息已被编辑。我已经把这个过程作为关于NetSuite的学习体验了。
原创 - 纯SQL的方式 - 不适合的NetSuite
是否是这样的满足您的需求?测试数据假定在id1和id2上查找重复项。 注意:这在NetSuite中不起作用,因为它支持有限的SQL函数。查看链接评论。
declare @table table (id1 int, id2 int, value int);
insert @table values
(1,1,11),
(1,2,12),
(1,3,13),
(2,1,21),
(2,2,22),
(2,3,23),
(1,3,1313);
--select * from @table order by id1, id2;
select t.*,
case when dups.id1 is not null then 1 else 0 end is_dup --identify dups when there is a matching dup record
from @table t
left join ( --subquery to find duplicates
select id1, id2
from @table
group by id1, id2
having count(1) > 1
) dups
on dups.id1 = t.id1
and dups.id2 = t.id2
order by t.id1, t.id2;
首先编辑 - NetSuite的目标,但在SQL。
这是一个基于问题中提供的示例可用语法的SQL测试,因为我没有NetSuite进行测试。这将使用类似的语法为每个重复行赋予一个大于1的值。 注意:这将给出适当的答案,但不适用于NetSuite。
select t.*,
sum(1) over (partition by id1, id2)
from @table t
order by t.id1, t.id2;
其次编辑 - 工作NetSuite的版本
一些回来后,在这里提出的是,在NetSuite的兼容版本:
sum/* comment */(1) OVER(PARTITION BY {name})
这也给的值大于1在任何重复的行上。
说明
这通过求和包括在分区中的每个行的值1。分区列应该是你认为重复的东西。如果只有一列重复(例如用户ID),则按照上述方式使用。如果多列重复(例如名字,姓氏,城市),则在分区中使用逗号分隔列表。 SQL将基本上按分区对行进行分组,并在sum/* comment */(1)
中将1加起来。问题中提供的示例总结了一个实际列。通过相加1,当分区中只有1个ID时,我们将得到值1。任何更高的是重复的。我想你可以称这个字段重复计数。
如果您不一定需要在不同行中显示重复项,只需按ACCOUNT列对结果进行分组,然后在附加列中获取每个组的结果计数,并突出显示该计数值是否大于1。 –
@tt_emrah,是的,我想到了这一点,并在我的问题中提到它。我更感兴趣的是在单独的行上查找重复项的方法,这些方法可用于各种情况。必须有方法将当前行值与前一行值进行比较并检查匹配。然后,我可以按照该字段进行排序,以便任何匹配都将位于连续的行上。 – ChrisB