如何根据另一种列类型对同一列进行不同的求和



我有一个SQL查询,我想在Alteryx中创建。 此查询通过开票表,并根据与其关联的位置汇总不同的费用。 因此,每个位置可以为每个列提供不同的类型。 下面是一个示例:

Location    FreightCharge   InvoiceCharge
A           FRT             IVC
B           FRT, CHG        IVC, DTL

当我只有一个位置需要担心时,使用带有 case 语句的查询效果很好。 现在我可能会有数百个。 我创建了一个包含类型的位置表(上表(。 但我不相信这是正确的方法。

最终,我要么想要一个可以从头开始执行此操作的 SQL 语句 (alteryx(,要么(更有可能(一个我可以用来循环访问链接到我的参考表并自动统计这些数据的位置的工作流。

有什么想法吗?

但是,如果我能为每个位置运行它,将其附加到发票表中,那就太好了。 

我尝试创建一个参考表并将其连接到我的主发票查询,但我无法让它按正确的数据进行过滤。 我考虑过创建一个循环遍历每条记录的 Alteryx 或 SSIS 包,但是我不需要一次循环浏览一条记录。一次只有一个位置。

对于位置 A,这将进入如下表:

Select Location, InvoiceNumber, Case WHEN InvoiceType IN('FRT') THEN InvoiceAmount Else 0 End as FreightCharge  --**I want this to be dynamic depending on location, Case WHEN InvoiceType IN('IVC','DTL') then InvoiceAmount Else 0 End as InvoiceCharge --**I want this to be dynamic depending on location From Invoicing Where InvoiceDate = Today

我想要一个发票表,其中包含所有位置及其总和值(它们应如何根据参考表求和(都在一个表中。

假设您将查找表组织为:

Location GroupLabel  InvoiceType
A        Freight     FRT
A        Invoice     IVC
B        Freight     FRT
B        Freight     CHG
B        Invoice     IVC
B        Invoice     DTL

听起来您的数据是这样的...

Location  InvoiceNumber  InvoiceAmount  InvoiceType
A         1              1.00           FRT
A         1              2.00           IVC
A         2              3.00           FRT
A         2              4.00           IVC
B         3              5.00           FRT
B         3              6.00           IVC
B         4              7.00           CHG
B         4              8.00           DTL

然后,我认为以下内容将提供您所追求的内容...

Select
i.Location
, i.InvoiceNumber
, l.GroupLabel
, Sum(i.Amount)
From
Invoicing i
Inner Join LookupTable l
on l.Location = i.Location
and l.InvoiceType = i.InvoiceType
Group By
i.Location
, i.InvoiceNumber
, l.GroupLabel

在 Alteryx 中,在执行按显示的三个字段分组并对发票金额求和的聚合之前,在位置和发票类型上执行联接应该非常简单。

相关内容

  • 没有找到相关文章

最新更新