sql—如何避免在通过id连接时在字段层次结构中重复行值

nhjlsmyf  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(392)

我试图找到一种方法,使层次结构顶层的行在sql中只出现一次,直接或通过一个额外的列:

数量1来自表1,数量2来自表2,它们通过id字段联接。从数学上讲,q1和q2之间没有任何关系。因此,我希望有下面的专栏,因为我将对q1求和,并将其与q2的单个值并行可视化。

有什么方法可以用sql实现这一点吗?如果有人知道一个解决方案的话,也可以在tableau中,因为我将在tableau中绘制数据。
事先谢谢你的帮助。

ijxebb2r

ijxebb2r1#

你可以用 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
7bsow1i6

7bsow1i62#

对于tableau,你只能取每个id的最小值或最大值并求和。取决于你的viz和你想做什么,它可以是一个简单的分钟做的工作。也许你需要总结一下结果,这样你就可以

WINDOW_SUM(MIN([Qty1]))

另一个选项是固定函数:

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

你可以总结一下。非常大的数据集可能会影响性能。

vyu0f0g1

vyu0f0g13#

tableau有一个称为数据混合的特性,非常适合这种情况。有了数据融合,您对两个不同的数据源(其中一个被区分为主数据源)进行并行独立查询,然后来自每个数据源的(聚合的)查询结果在客户端以类似于聚合结果的客户端左联接的方式进行组合(其中主数据源在左侧)
因此,如果您的数据行没有有意义的关系,只需将两个表按相似的字段分组即可,然后查看数据混合是否适用于您的情况。有关详细信息,请参见tableau帮助。数据混合中的一些边缘情况可能有点晦涩难懂,但基本的简单情况效果很好。

相关问题