1
逆转置我有两个表:加入并在多个表
校正表:
C_CORRECTIONS
CorrAmount |HalfYear1 |HalfYear2 |Type |REFNUM |
-----------------------------------------------------
1000 |50 |50 |HYINT |R123 |
整理表:
P_COLLECTED
Amount |Type |Account |REFNUM |
-----------------------------------------
1500 |TOTAL |ACCT1 |R123 |
50 |HYINT |ACCT2 |R123 |
50 |HYINT |ACCT3 |R123 |
我需要的是:
CorrAmount |Type |Account |REFNUM |
-----------------------------------------
1000 |TOTAL |ACCT1 |R123 |
50 |HYINT |ACCT2 |R123 |
50 |HYINT |ACCT3 |R123 |
我试过了如下:
SELECT DISTINCT C.AMT, P.ACCOUNT,C.REFNUM FROM (
SELECT U.AMT, U.Type, REFNUM
FROM C_CORRECTIONS
UNPIVOT
(
AMT
FOR INT_AMT IN (CorrAmount,HalfYear1,HalfYear2)
) U
) C
LEFT JOIN P_COLLECTED P
ON C.REFNUM = P.REFNUM AND C.AMT = P.Amount;
结果:
AMT |ACCOUNT |REFNUM |
--------|-----------|-------|
50 |ACCT2 |R123 |
50 |ACCT3 |R123 |
1000 | |R123 |
编辑:好的。所以我使用了左连接而不是连接,并将其放在不同的位置,并且我获得了主金额,但我似乎无法为其获取帐户。
完美的作品!谢谢..另外,实际的查询非常复杂,并且有5个巨大表格的连接。有没有别的办法?减少案例功能花费的时间。 – Anu
@Anu CASE在行级别工作,所以不影响查询计划,所以不需要更多时间。如果REFNUM是C_CORRECTIONS中的首选键,那么额外的左连接不应使复杂查询变慢。但是也许你注意到这个查询也加入了c.Type的t.Type。如果您只需要更正总金额,则可以将其简化为ON(t.REFNUM = c.REFNUM和t.Type ='TOTAL')'。 – LukStorms
谢谢..只是实现了即使HalfYear1和HalfYear2将被改变(在这种情况下50到25)..我将需要修正表作为基地.. – Anu