联接表上的记录重复

我对SQL和Tableau还是很陌生,但是我正在努力实现自己的个人项目。

表A;显示一个表格,其中包含每个产品类别的缺陷数量以及何时提出缺陷

+--------+-------------+--------------+-----------------+
| Issue# | Date_Raised | Category_ID# | Defect_Quantity | 
+--------+-------------+--------------+-----------------+
| PCR12  | 11-Jan-2019 | Product#1    |              14 |
| PCR13  | 12-Jan-2019 | Product#1    |              54 |
| PCR14  | 5-Feb-2019  | Product#1    |               5 |
| PCR15  | 5-Feb-2019  | Product#2    |               7 | 
| PCR16  | 20-Mar-2019 | Product#1    |              76 | 
| PCR17  | 22-Mar-2019 | Product#2    |               5 | 
| PCR18  | 25-Mar-2019 | Product#1    |              89 | 
+--------+-------------+--------------+-----------------+

表B;显示每月每种产品的消费量

+-------------+--------------+-------------------+
| Date_Raised | Category_ID# | Consumed_Quantity |
+-------------+--------------+-------------------+
| 5-Jan-2019  | Product#1    | 100               |
| 17-Jan-2019 | Product#1    | 200               |
| 5-Feb-2019  | Product#1    | 100               |
| 8-Feb-2019  | Product#2    | 50                |
| 10-Mar-2019 | Product#1    | 100               |
| 12-Mar-2019 | Product#2    | 50                |
+-------------+--------------+-------------------+

END RESULT

我想在Tableau中创建一个表/条形图,该表/条形图显示每个Category_ID#每月的Defect_Quantity / Consumed_Quantity,因此如下所示;

+----------+-----------+-----------+
|  Month   | Product#1 | Product#2 |
+----------+-----------+-----------+
| Jan-2019 | 23%       |           |
| Feb-2019 | 5%        | 14%       |
| Mar-2019 | 89%       | 10%       |
+----------+-----------+-----------+

我曾尝试过这么远 不幸的是,我并没有真正做任何事情,我在努力理解如何在加入基于Category_ID#的表后摆脱重复项。

感谢我在这里能获得的所有帮助。

myzhan 回答:联接表上的记录重复

我可以考虑同时在left joins和2上进行product1

select to_char(to_date(Date_Raised,'d-mon-yyyy'),'mon-yyyy'),(p2.product1 - sum(case when category_id='Product#1' then Defect_Quantity else 0 end))/p2.product1 * 100,(p2.product2 - sum(case when category_id='Product#2' then Defect_Quantity else 0 end))/p2.product2 * 100  
from tableA t1
left join 
    (select to_char(to_date(Date_Raised,'mon-yyyy') Date_Raised,sum(Comsumed_Quantity) as product1 tableB  
        where category_id = 'Product#1'
        group by to_char(to_date(Date_Raised,'mon-yyyy')) p1
    on p1.Date_Raised = t1.Date_Raised  
left join 
    (select to_char(to_date(Date_Raised,sum(Comsumed_Quantity) as product2 tableB  
        where category_id = 'Product#2'
        group by to_char(to_date(Date_Raised,'mon-yyyy')) p2
    on p2.Date_Raised = t1.Date_Raised
group by to_char(to_date(Date_Raised,'mon-yyyy')
,

通过使用ROW_NUMBER()OVER(PARTITION BY ORDER BY)作为RN,可以删除重复的行。作为最终结果,您应该从日期中提取月份并使用数据透视表来实现。

,

我会这样:

select to_char(date_raised,'YYYY-MM'),(sum(case when product = 'Product#1' then defect_quantity end) /
        sum(case when product = 'Product#1' then consumed_quantity end)
       ) as product1,(sum(case when product = 'Product#2' then defect_quantity end) /
        sum(case when product = 'Product#2' then consumed_quantity end)
       ) as product2        
from ((select date_raised,product,defect_quantity,0 as consumed_quantity
       from a
      ) union all
      (select date_raised,0 as defect_quantity,consumed_quantity
       from b
      )
     ) ab
group by to_char(date_raised,'YYYY-MM')
order by min(date_raised);

(我更改了日期格式,因为我更喜欢YYYY-MM,但这与逻辑无关。)

为什么我更喜欢这种方法?这将包括所有个月,其中任一表中都有一行。我不必担心会无意中滤除某些月份,因为一个月内会出现生产缺失或缺陷。

本文链接:https://www.f2er.com/3076252.html

大家都在问