[英]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 = OpStats
和T2 = 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中的元素:
SUM(OpStats.risk_amount_adj)/1000000 OpStatsVol
RegSplits.Volume RegSplitsVol
數字1可以-它是一個聚合函數,不能在GROUP BY中。
數字2導致此錯誤 -它不是聚合函數,並且未在GROUP BY子句中列出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.