当连接到一个ID上时,如何避免在字段层次结构中重复行值?

问题描述 投票:0回答:1

我试图找出一种方法,使最高层次的层次结构的行在SQL中只出现一次,直接或通过一个额外的列。

enter image description here

数量1来自表1 数量2来自表2 它们是通过ID字段连接的 Q1和Q2在数学上没有任何关系。我希望有以下的列作为结果,因为我将对Q1进行求和,并将其与Q2的单个值同时可视化。

enter image description here

有没有什么方法可以用SQL来实现?或者在Tableau中,如果有人知道一个解决方案,因为我将在Tableau中绘制数据。

提前感谢您的帮助。

sql duplicates tableau hierarchy
1个回答
1
投票

你可以使用 row_number() - 但你需要一个列来定义记录的顺序(在整个表中是唯一的,或者至少在具有相同的 id). 我以为您有这样一列,而且它叫做 ordering_id:

select 
    t.*,
    case when row_number() over(partition by id order by ordering_id) = 1
        then quantity1
    end quantity1_edit
from mytable

1
投票

对于Tableau,你可以取每个ID的MIN或MAX,然后相加。根据你的视觉效果和你想做的事情,可能是一个简单的MIN就可以了。也许您需要将结果相加,所以可以做一个

WINDOW_SUM(MIN([Qty1]))

另一种选择是FIXED函数。

{FIXED [ID]: MIN([Qty1])}

你可以把它加起来 对于非常大的数据集,性能可能会受到影响。


1
投票

Tableau有一个叫做数据混合的功能,很适合这样的情况。通过数据混合,你是对两个不同的数据源进行并行的独立查询(其中一个数据源被区分为主数据源),然后在客户端将来自每个数据源的(汇总)查询结果进行合并,其方式类似于汇总结果的客户端左联(其中主数据源在左边)。

所以,如果你的数据行没有意义上的关系,只是两张表可以通过相似的字段进行归纳分组,那么看看数据混合是否适合你的情况。详情请看Tableau的帮助。数据混合中的一些边缘案例可能会有点玄乎,但基本的直接案例效果还是不错的。

© www.soinside.com 2019 - 2024. All rights reserved.