簡體   English   中英

左加入 ROW_NUMBER() OVER (PARTITION

[英]Left Join on ROW_NUMBER() OVER (PARTITION

我有兩張表,一張是銷售信息,另一張是運輸信息。 兩者都在每個訂單的項目級別。 換句話說,即使訂單中有多個項目,兩個表中的每條記錄的數量也只有 1。

表格1

訂單號 產品代碼 成本 貨幣
100 10 美元 美元
100 10 美元 美元
101 bb 15 美元 美元

表 2

訂單號 產品代碼 運營商服務 裝運成本
100 承運人 A 7 美元
100 承運人 B 7 美元
101 bb 載體 C 13 美元

我需要加入表格以便從每個表格中提取方面。 挑戰在於每條記錄都沒有唯一的標識符。 我最初嘗試在 order_number 和 product_code 上加入這兩個表,但這導致結果重復(因為缺乏唯一性)。

然后我嘗試添加 ROW_NUMBER() OVER (PARTITION... 以分配行號並嘗試將該條件添加到連接中,但我仍然失敗。第二個 CTE 的值沒有拉到最終結果,但如果你要單獨運行它,值會填充。

WITH ss AS (
    SELECT 
        ROW_NUMBER() OVER (PARTITION BY product_code) AS row_id,              
        order_number,                                               
        product_code,                               
        cost,
        currency,                                
    FROM sales  
    ORDER BY order_number, product_code, ROW_NUMBER() OVER (PARTITION BY product_code)),
sis AS (
     SELECT 
        ROW_NUMBER() OVER (PARTITION BY product_code) AS row_id,
        order_number,
        product_code,
        carrier_service,
        shipment_cost
      FROM items
      GROUP BY 1,2,3,4,5,6
      ORDER BY order_number, product_code, ROW_NUMBER() OVER (PARTITION BY product_code))
Select 
    ss.order_number,                    
    ss.product_code,                    
    ss.cost
    ss.currency,
    sis.carrier_service,
    sis.shipment_cost,
FROM ss  
LEFT JOIN sis 
 ON ss.order_number=sis.order_number AND ss.product_code=sis.product_code and ss.row_id=sis.row_id

ORDER BY ss.order_number, ss.product_code

期望的結果

訂單號 產品代碼 成本 貨幣 運營商服務 裝運成本
100 10 美元 美元 承運人 A 7 美元
100 10 美元 美元 承運人 B 7 美元
101 bb 15 美元 美元 載體 C 13 美元

實際結果

訂單號 產品代碼 成本 貨幣 運營商服務 裝運成本
100 10 美元 美元 Null Null
100 10 美元 美元 Null Null
101 bb 15 美元 美元 Null Null

我無法加入行號嗎? 或者有沒有更好的方法來解決這個問題?

考慮下面

select order_number, product_code, cost, currency, carrier_service, shipment_cost
from (select *, row_number() over(partition by product_code) rn from table1) t1
left join (select *, row_number() over(partition by product_code) rn from table2) t2
using(order_number, product_code, rn)
order by order_number, product_code     

如果應用於您問題中的示例數據 - output 是

在此處輸入圖像描述

請注意:即使我在您的代碼中使用over(partition by product_code) - 我覺得它應該是over(partition by order_number) - 但根據您的特定問題尚不清楚 - 所以我要離開它在解決作為您問題重點的左連接問題時由您決定

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM