在 NetSuite 保存的搜索中突出显示重复值
Highlight Duplicate Values in a NetSuite Saved Search
我正在寻找一种方法来突出显示 NetSuite 保存的搜索中的重复项。重复项位于名为 "ACCOUNT" 的列中,其中填充了文本值。
NetSuite 允许使用 SQL 服务器的精简版向搜索中添加字段(列)。它还允许使用相同的代码有条件地突出显示整行。但是我没有看到比较数据行之间值的明显方法。
虽然可以在摘要报告中将重复项归为一组并通过 2 或更多的计数来识别,但我想单独显示重复行并突出显示每行。
我发现的最接近的是一个计算 运行 总数的巧妙公式 here:
sum/* comment */({amount})
OVER(PARTITION BY {name}
ORDER BY {internalid}
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
我想知道是否可以通过检查重复项的字段对结果进行排序,并调整此代码以识别 "ACCOUNT" 字段中某行与前一行之间的变化。
有什么想法吗?谢谢!
此 post 已编辑。我已将进展作为有关 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 个 ID 时,通过对 1 求和我们将得到值 1。任何更高的都是重复的。我想您可以将此字段称为重复计数。
我正在寻找一种方法来突出显示 NetSuite 保存的搜索中的重复项。重复项位于名为 "ACCOUNT" 的列中,其中填充了文本值。
NetSuite 允许使用 SQL 服务器的精简版向搜索中添加字段(列)。它还允许使用相同的代码有条件地突出显示整行。但是我没有看到比较数据行之间值的明显方法。
虽然可以在摘要报告中将重复项归为一组并通过 2 或更多的计数来识别,但我想单独显示重复行并突出显示每行。
我发现的最接近的是一个计算 运行 总数的巧妙公式 here:
sum/* comment */({amount})
OVER(PARTITION BY {name}
ORDER BY {internalid}
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
我想知道是否可以通过检查重复项的字段对结果进行排序,并调整此代码以识别 "ACCOUNT" 字段中某行与前一行之间的变化。
有什么想法吗?谢谢!
此 post 已编辑。我已将进展作为有关 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 个 ID 时,通过对 1 求和我们将得到值 1。任何更高的都是重复的。我想您可以将此字段称为重复计数。