![](/img/trans.png)
[英]Sql in postgres: select every row in one table that is related to other and other
[英]Join One Table with Other Table for Every Row Type
我的第一張表及其數據是:
DECLARE @TempTableA TABLE (FinYearVal VARCHAR(9))
FinYearVal
----------
2007-2008
2008-2009
2009-2010
2010-2011
2011-2012
2012-2013
2013-2014
2014-2015
然后我有另一個表,數據為:
DECLARE @TempTableB TABLE (Category VARCHAR(10), FinYear VARCHAR(9), AMOUNT NUMERIC(18,10))
Category FinYear AMOUNT
---------- ------------- ----------
A 2013-2014 100.0000
A 2014-2015 200.0000
B 2012-2013 100.0000
B 2013-2014 200.0000
B 2014-2015 300.0000
B 2015-2016 400.0000
C 2011-2012 100.0000
C 2012-2013 200.0000
我希望每個類別的表1與表2正確連接,就像我們分別對數據進行右連接和聯合一樣。
預期結果是:
Category FinYearVal AMOUNT
---------- ---------- ----------
A 2007-2008 0.0000
A 2008-2009 0.0000
A 2009-2010 0.0000
A 2010-2011 0.0000
A 2011-2012 0.0000
A 2012-2013 0.0000
A 2013-2014 100.0000
A 2014-2015 200.0000
B 2007-2008 0.0000
B 2008-2009 0.0000
B 2009-2010 0.0000
B 2010-2011 0.0000
B 2011-2012 0.0000
B 2012-2013 100.0000
B 2013-2014 200.0000
B 2014-2015 300.0000
C 2007-2008 0.0000
C 2008-2009 0.0000
C 2009-2010 0.0000
C 2010-2011 0.0000
C 2011-2012 100.0000
C 2012-2013 200.0000
C 2013-2014 0.0000
C 2014-2015 0.0000
注意:我的Table2有很多類別,我可以在其中動態選擇要在查詢中加入的類別。
嘗試這個
SELECT C.Category,A.FinYearVal, ISNULL(B.AMOUNT,0) AS AMOUNT
FROM @TempTableA A
CROSS JOIN (SELECT DISTINCT Category FROM @TempTableB) C
LEFT JOIN @TempTableB B ON B.Category = C.Category AND B.FinYear = A.FinYearVal
SELECT t.FinYearVal, t.Category, ISNULL(ttb.AMOUNT,0)
FROM (
SELECT tta.FinYearVal, d.Category
FROM @TempTableA tta
CROSS JOIN (SELECT DISTINCT ttb.Category FROM @TempTableB ttb) AS d
) AS t
LEFT OUTER JOIN @TempTableB ttb ON t.FinYearVal = ttb.FinYear AND ttb.Category = t.Category
ORDER BY t.Category, t.FinYearVal
如果您有特殊的“類別”表,則可以通過將此表上的“交叉連接”替換為“交叉連接”來簡化查詢
你可以試試這個嗎?
select t1.category,t1.finyearval,coalesce(t2.amount,0) from
(
select t1.category,t2.finyearval from @TempTableB as t1 inner join @TempTableA as t2 on 1=1
) as t1 left join @TempTableB as t2 on t1.finyearval=t2.finyear and t1.Category=t2.Category
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.