突出显示NetSuite保存的搜索中的重复值

时间:2016-08-24 19:37:43

标签: sql-server netsuite

我正在寻找一种方法来突出显示NetSuite保存搜索中的重复项。重复项位于名为" ACCOUNT"的列中。填充了文本值。

NetSuite允许使用精简的SQL Server版本向搜索添加字段(列)。它还允许使用相同的代码对整行进行条件突出显示。但是,我没有看到明显的方法来比较数据行之间的值。

虽然重复项可以在摘要报告中组合在一起,并且计数为2或更多,但我想分别显示重复的行并突出显示每行。

我发现最接近的是一个聪明的公式来计算一个总计here

sum/* comment */({amount})
 OVER(PARTITION BY {name}
 ORDER BY {internalid}
 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

我想知道是否可以通过检查重复项的字段对结果进行排序,并调整此代码以识别" ACCOUNT"行与上一行之间的字段。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

此帖子已被修改。我把这个进展留给了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;

First Edit - 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。任何更高的东西都是重复的。我想你可以把这个字段称为重复计数。

相关问题