但是我有一个非常明确的列错误。我已正确别名所有列。我想做的就是从名为fdsna.t_mer_dim_na的表中引入avg_tkt_amt。它可以使用primary_mer_num连接到第一个表。我不知道为什么我会一直收到这个错误。
SELECT
primary_ext_mid
, mer_dba_nam
, clg_num
, ent_num
, ent_nam
, mer_opn_dte
, CASE
WHEN mer_cls_dte > sysdate+30
THEN null
ELSE
mer_cls_dte
END mer_cls_dte
--, compliant_environment
--, certified_date
, MAX(lst_dep_dte) lst_dep_dte
, MIN(first_dep_dte) first_dep_dte
, CASE
WHEN period_date BETWEEN '1-jan-2018' AND '31-jan-2018'
THEN SUM(grss_vol)
ELSE
null
END jan_gross_vol
, CASE
WHEN period_date BETWEEN '1-feb-2018' AND '28-feb-2018'
THEN SUM(grss_vol)
ELSE
null
END feb_gross_vol
, CASE
WHEN period_date BETWEEN '1-mar-2018' AND '28-mar-2018'
THEN SUM(grss_vol)
ELSE
null
END mar_gross_vol
, SUM(grss_vol) AS gross_volume
--, avg_tkt_amt
, SUM (DIAOE-equip_rev_amt) AS DIAO
, SUM(dia) AS DIA
,SUM(diaoe) AS DIAOE
,SUM(AMEX_ACQUIRED_TRN_DB_cnt - AMEX_ACQUIRED_TRN_CR_cnt + DEBIT_CARD_TRN_DB_cnt - DEBIT_CARD_TRN_CR_cnt + DISCOVER_ACQUIRED_TRN_DB_cnt - DISCOVER_ACQUIRED_TRN_CR_cnt + VISA_MC_ACQUIRED_TRN_DB_cnt - VISA_MC_ACQUIRED_TRN_CR_cnt) AS nettrncnt
,SUM(OTHER_INCOME_TRN_DB_cnt - OTHER_INCOME_TRN_CR_cnt) AS nettrncnt_other
,SUM(CASH_ADVANCE_TRN_DB_cnt - CASH_ADVANCE_TRN_CR_cnt) AS nettrncnt_cash
FROM bi.t_mer_dim_na a,
stratus.T_SETT_NA b,
bi.t_mer_bill_mth_na c,
FDSNA.T_MER_DIM_NA d,
(SELECT b.mid,a.compliant_environment,a.certified_date
FROM eclipse.compliance_info a,eclipse.merch_mid b
WHERE a.ecl_mid_tag=b.ecl_mid_tag
) f
WHERE a.mid_tag = b.mid_tag
AND clg_num = 7
AND a.mer_dim_id = c.mer_dim_id
AND period_date >= to_date('01012018','mmddyyyy')
AND f.mid(+) = primary_ext_mid
--AND e.mid = primary_ext_mid
AND d.external_mid = primary_mer_num
AND ent_num in ('45810','45811','46849','45948','45824','46911','45509','46845')
GROUP BY primary_ext_mid, mer_dba_nam, clg_num, ent_num, mer_opn_dte, ent_nam,
CASE
WHEN mer_cls_dte > sysdate+30
THEN null
ELSE
mer_cls_dte
END
,period_date
--) sq1
--left join FDSNA.T_MER_DIM_NA b
--on sq1.primary_ext_mid = b.primary_ext_mid
;
答案 0 :(得分:1)
很久以前,在远离数据库的地方,有两张桌子互相幻想。他们花了很多时间做桌子 - 他们只是躺在那里。
=subtotal(109;B2:B999)
有一天,一个闪亮的SQL查询出现了,并问我们的表是否想要加入搜索真相。他们高兴地同意了,他们找到了生命,宇宙和一切的答案。
create table table1(
id1 varchar2(10)
,truth number
);
create table table2(
id2 varchar2(10)
);
几年过去了,我们的桌子很开心。现在,在每个童话故事中都必须有一个select id1 -- Only in table1
,id2 -- Only in table2
,truth -- Only in table1
from table1
join table2 on(id1 = id2);
ID1 ID2 TRUTH
------------ ------------ ----------
A A 42
因为在这个数据库中只有一个真理的空间,所以在承诺的土地上,地狱一下子就松了一口气。
alter table table2 add truth number;
当一个单一真理的承诺不再奏效时,人们正在堕落并大量死亡。
select id1 -- Only in table1
,id2 -- Only in table2
,truth -- OUCH! So many truths! who to trust?
from table1
join table2 on(id1 = id2);
表2立即感到遗憾的是没有与table1讨论这个问题,在与King的观众讨论之后,他们设法通过在查询中使用完全限定的列名来解决问题。之后他们通过了一项法律来强制执行表别名和完全限定的列甚至以进行单表查询!
,truth
*****
ERROR at line 3:
ORA-00918: column ambiguously defined
故事的道德:始终使用表别名和完全限定的列名。无论如何你最终都会这样做。这只是时间问题。
答案 1 :(得分:0)
您可能在两个表中都有相同名称的列。这就是显示错误的原因。使用
将表名别名