【发布时间】:2016-05-11 10:16:57
【问题描述】:
采取以下示例查询。我想查找查询返回的列数
SELECT '29-JAN-16' AS AS_OF_DATE,
WBD.CASHPOOL_TREAS_CODE,
WBD.CNTRPART_TREAS_CODE,
WBD.PRIN_BAL_AMT,
(SELECT EX.EOD_SPOT_CNV_RATE
FROM EDW.T_FACT_EXCH_RATE_LONG EX,
EDW.T_DIM_DATE DT,
EDW.T_DIM_CURR FC,
EDW.T_DIM_CURR TC
WHERE EX.FIN_DATE_KEY = DT.DATE_KEY
AND EX.FROM_CURR_KEY = FC.CURR_KEY
AND EX.TO_CURR_KEY = TC.CURR_KEY
AND EXISTS (SELECT DT.CAL_DATE
FROM EDW.T_FACT_EXCH_RATE_LONG EX,
EDW.T_DIM_DATE DT,
EDW.T_DIM_CURR FC,
EDW.T_DIM_CURR TC
WHERE EX.FIN_DATE_KEY = DT.DATE_KEY
AND EX.FROM_CURR_KEY = FC.CURR_KEY
AND EX.TO_CURR_KEY = TC.CURR_KEY
AND TC.CURR_CODE = 'USD')
AND EXISTS (SELECT FC.CURR_CODE
FROM EDW.T_FACT_EXCH_RATE_LONG EX,
EDW.T_DIM_DATE DT,
EDW.T_DIM_CURR FC,
EDW.T_DIM_CURR TC
WHERE EX.FIN_DATE_KEY = DT.DATE_KEY
AND EX.FROM_CURR_KEY = FC.CURR_KEY
AND EX.TO_CURR_KEY = TC.CURR_KEY
AND TC.CURR_CODE = 'USD')) AS EOD_SPOT_CNV_RATE,
(SELECT EX.MOR_CURR_CNV_RATE
FROM EDW.T_FACT_EXCH_RATE_LONG EX,
EDW.T_DIM_DATE DT,
EDW.T_DIM_CURR FC,
EDW.T_DIM_CURR TC
WHERE EX.FIN_DATE_KEY = DT.DATE_KEY
AND EX.FROM_CURR_KEY = FC.CURR_KEY
AND EX.TO_CURR_KEY = TC.CURR_KEY
AND EXISTS (SELECT DT.CAL_DATE
FROM EDW.T_FACT_EXCH_RATE_LONG EX,
EDW.T_DIM_DATE DT,
EDW.T_DIM_CURR FC,
EDW.T_DIM_CURR TC
WHERE EX.FIN_DATE_KEY = DT.DATE_KEY
AND EX.FROM_CURR_KEY = FC.CURR_KEY
AND EX.TO_CURR_KEY = TC.CURR_KEY
AND TC.CURR_CODE = 'USD')
AND EXISTS (SELECT FC.CURR_CODE
FROM EDW.T_FACT_EXCH_RATE_LONG EX,
EDW.T_DIM_DATE DT,
EDW.T_DIM_CURR FC,
EDW.T_DIM_CURR TC
WHERE EX.FIN_DATE_KEY = DT.DATE_KEY
AND EX.FROM_CURR_KEY = FC.CURR_KEY
AND EX.TO_CURR_KEY = TC.CURR_KEY
AND TC.CURR_CODE = 'USD')) MOR_CURR_CNV_RATE,
(SELECT EX.MNTHLY_GAP_CURR_CNV_RATE
FROM EDW.T_FACT_EXCH_RATE_LONG EX,
EDW.T_DIM_DATE DT,
EDW.T_DIM_CURR FC,
EDW.T_DIM_CURR TC
WHERE EX.FIN_DATE_KEY = DT.DATE_KEY
AND EX.FROM_CURR_KEY = FC.CURR_KEY
AND EX.TO_CURR_KEY = TC.CURR_KEY
AND EXISTS (SELECT DT.CAL_DATE
FROM EDW.T_FACT_EXCH_RATE_LONG EX,
EDW.T_DIM_DATE DT,
EDW.T_DIM_CURR FC,
EDW.T_DIM_CURR TC
WHERE EX.FIN_DATE_KEY = DT.DATE_KEY
AND EX.FROM_CURR_KEY = FC.CURR_KEY
AND EX.TO_CURR_KEY = TC.CURR_KEY
AND TC.CURR_CODE = 'USD')
AND EXISTS (SELECT FC.CURR_CODE
FROM EDW.T_FACT_EXCH_RATE_LONG EX,
EDW.T_DIM_DATE DT,
EDW.T_DIM_CURR FC,
EDW.T_DIM_CURR TC
WHERE EX.FIN_DATE_KEY = DT.DATE_KEY
AND EX.FROM_CURR_KEY = FC.CURR_KEY
AND EX.TO_CURR_KEY = TC.CURR_KEY
AND TC.CURR_CODE = 'USD')) MNTHLY_GAP_CURR_CNV_RATE,
(SELECT EX.QTRLY_GAP_CURR_CNV_RATE
FROM EDW.T_FACT_EXCH_RATE_LONG EX,
EDW.T_DIM_DATE DT,
EDW.T_DIM_CURR FC,
EDW.T_DIM_CURR TC
WHERE EX.FIN_DATE_KEY = DT.DATE_KEY
AND EX.FROM_CURR_KEY = FC.CURR_KEY
AND EX.TO_CURR_KEY = TC.CURR_KEY
AND EXISTS (SELECT DT.CAL_DATE
FROM EDW.T_FACT_EXCH_RATE_LONG EX,
EDW.T_DIM_DATE DT,
EDW.T_DIM_CURR FC,
EDW.T_DIM_CURR TC
WHERE EX.FIN_DATE_KEY = DT.DATE_KEY
AND EX.FROM_CURR_KEY = FC.CURR_KEY
AND EX.TO_CURR_KEY = TC.CURR_KEY
AND TC.CURR_CODE = 'USD')
AND EXISTS (SELECT FC.CURR_CODE
FROM EDW.T_FACT_EXCH_RATE_LONG EX,
EDW.T_DIM_DATE DT,
EDW.T_DIM_CURR FC,
EDW.T_DIM_CURR TC
WHERE EX.FIN_DATE_KEY = DT.DATE_KEY
AND EX.FROM_CURR_KEY = FC.CURR_KEY
AND EX.TO_CURR_KEY = TC.CURR_KEY
AND TC.CURR_CODE = 'USD')) QTRLY_GAP_CURR_CNV_RATE
FROM EDW.T_ICF_CASHPOOL_ACCT_DETL ICAD
LEFT OUTER JOIN (SELECT MLC.PD_TO_DATE,
ICBD.BAL_RPTG_DATE,
ICBD.IHB_ACCT_ID,
ICBD.BAL_CURR_CODE,
ICBD.OPEN_PRIN_BAL_AMT,
ICBD.PRIN_ADDN_AMT,
ICBD.PRIN_RPYMT_AMT,
ICBD.CLOSG_PRIN_BAL_AMT,
ICBD.OPEN_INT_BAL_AMT,
ICBD.ACCR_INT_CHRG_AMT,
ICBD.INT_SETL_AMT,
ICBD.CLOSG_INT_BAL_AMT,
ICBD.CASHPOOL_TREAS_CODE,
ICBD.CNTRPART_TREAS_CODE,
ICBD.PRIN_BAL_AMT
FROM EDW.T_ICF_CASHPOOL_BAL_DETL ICBD
JOIN EDW.T_MD_LOAD_CNTL MLC
ON MLC.SRCE_SYS_NM = 'EDW'
AND ICBD.BAL_RPTG_DATE = MLC.PD_TO_DATE) WBD
ON ICAD.IHB_ACCT_ID = WBD.IHB_ACCT_ID
我曾尝试将 Informatica 中的逻辑用作: 在 'SELECT' 和 'FROM' 之间计算逗号 + 1 的数量。但是当有像上面查询这样的派生列时,这个逻辑就会失败。有什么办法可以解决这个问题?解决方案可以来自 Informatica 、UNIX 脚本。不建议直接在数据库中运行查询
PS:我知道这里的列数是 8。这个查询只是一个示例。我想通过表达式转换中的某些逻辑计算列数,甚至 UNIX 脚本都可以
【问题讨论】:
标签: sql unix informatica-powercenter