簡體   English   中英

對子查詢的SQL左外部聯接

[英]SQL Left Outer Join on Subquery

我正在嘗試建立一個查詢,該查詢包含一個左聯接子查詢-基於我在上一個問題中學到的原理-該查詢應該從兩個不同的表中提取相似的數據集。 目的是按account || platform比較數量數據 account || platform以確保從另一個表創建一個表的存儲過程能夠正確執行此操作。

這個想法是這樣的:

Account || Product || T1Vol || T2Vol
abc        AT         10        10
def        RT         20        25
ghi        OB         30

因此,在此示例中,想法是從T1(該過程所作用的表)中拉出所有帳戶和產品,並從T2(新創建的表)中拉出匹配的所有帳戶和產品(因此,T1上的Left Join = T2)。 (理想情況下,一切都將完美匹配,T1與T2體積沒有差異,T2體積沒有零)。

我在下面的查詢中編寫了代碼來完成此操作,但效果不佳。 我得到的當前錯誤not a GROUP BY expression -我認為這不是真正的問題 我一直在搜索,但無濟於事。

查詢如下。 (與示例保持一致, T1 = OpStatsT2 = RegSplits 。非常感謝您的幫助。

  SELECT DTA.trading_code Account, OpStats.product_dwkey Platform, SUM(OpStats.risk_amount_adj)/1000000 OpStatsVol, RegSplits.Volume RegSplitsVol
  FROM fact_trade_presplit_rollup OpStats
  INNER JOIN dim_trading_accounts DTA ON OpStats.trading_dwkey=DTA.trading_dwkey
  LEFT OUTER JOIN 
                  ( SELECT b.trading_Code Account, a.product_dwkey Platform, SUM(a.risk_amount_adj)/1000000 Volume
                    FROM fact_trade_rollup a 
                    INNER JOIN dim_trading_accounts b on a.trading_dwkey=b.trading_dwkey
                    WHERE a.account_type IN('Customer','Taker') 
                      AND a.date_key>='01-JAN-16' 
                      AND a.date_key<='31-MAR-16'
                      AND a.daily_db_metric NOT IN ('Manual Treasury Volume ($B)', 'Manual Volume ($B)', 'HSBC-WL POMS (Internal) Volume ($B)','JPMC-WL Order Book (Internal) Volume ($B)')
                      AND (a.product_dwkey IN('RT','HWL') AND a.source_name<>'STP')
                    GROUP BY b.trading_code, a.product_dwkey ) RegSplits
                ON (DTA.trading_code = RegSplits.Account) /* is it because I am trying to join DTA to the subquery */
  WHERE OpStats.account_type IN('Customer','Taker') 
    AND OpStats.date_key>='01-JAN-16' 
    AND OpStats.date_key<='31-MAR-16'
    AND OpStats.daily_db_metric NOT IN ('Manual Treasury Volume ($B)', 'Manual Volume ($B)', 'HSBC-WL POMS (Internal) Volume ($B)','JPMC-WL Order Book (Internal) Volume ($B)')
    AND (OpStats.product_dwkey IN('RT','HWL') AND OpStats.source_name<>'STP')
  GROUP BY DTA.trading_code, OpStats.product_dwkey;

“不按表達式分組”錯誤很容易檢查。
只需將SELECT表達式與GROUP BY表達式進行比較:

 SELECT DTA.trading_code Account, 
       OpStats.product_dwkey Platform, 
       SUM(OpStats.risk_amount_adj)/1000000 OpStatsVol, 
       RegSplits.Volume RegSplitsVol
FROM ......
......
GROUP BY DTA.trading_code, 
        OpStats.product_dwkey;

SELECT中有兩個不在GROUP BY中的元素:

  1. SUM(OpStats.risk_amount_adj)/1000000 OpStatsVol
  2. RegSplits.Volume RegSplitsVol

數字1可以-它是一個聚合函數,不能在GROUP BY中。
數字2導致此錯誤 -它不是聚合函數,並且未在GROUP BY子句中列出。

暫無
暫無

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

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