0

我们有一个 SQL 脚本,它使用以下内容创建 CSV:

SELECT DISTINCT auf_kopf.auf_nr, TO_CHAR(auf_kopf.erfass_dat,'DD/MM/YYYY'), TO_CHAR(auf_kopf.liefer_dat,'DD/MM/YYYY'), v_ord_custname.cust_name, auf_pos.auf_pos, v_auf_stat_0.anz, v_reason_code_1.reason_code, v_reason_code_1.reason_desc, v_auf_pos_vmat.glas1, auf_pos.glas2, auf_kopf.auf_off, auf_pos.ver_art
FROM auf_kopf, auf_pos, v_auf_pos_vmat, v_auf_stat_0, v_ord_custname, v_reason_code_1, glas_daten_basis
WHERE auf_kopf.erfass_dat >sysdate-7
AND auf_kopf.kopf_reason IS NOT NULL
AND (auf_kopf.auf_nr=auf_pos.auf_nr(+))
AND (auf_pos.auf_nr=v_auf_pos_vmat.auf_nr(+))
AND (auf_pos.auf_pos=v_auf_pos_vmat.auf_pos(+))
AND (auf_pos.variante=v_auf_pos_vmat.variante(+))
AND (auf_pos.auf_nr=v_auf_stat_0.auf_nr)
AND (auf_pos.auf_pos=v_auf_stat_0.auf_pos)
AND (auf_pos.variante=v_auf_stat_0.variante)
AND (auf_kopf.auf_nr=v_ord_custname.order_no)
AND (auf_kopf.auf_nr=v_reason_code_1.order_no(+));

有一个名为的表glas_daten_basis,其中包含对从v_auf_pos_vmat.glas1和显示的代码的描述auf_pos.glas2。我们如何显示描述,因为我认为子查询是必需的,但我无法让它工作。

我们需要glas_daten_basis.gl_bez(描述)v_auf_pos_vmat.glas1auf_pos.glas2。可以使用glas_daten_basis.idnr和匹配代码v_auf_pos_vmat.glas1

4

1 回答 1

2

据我所知,我认为您只需要加入glas_daten_basis两次:

SELECT DISTINCT auf_kopf.auf_nr, TO_CHAR(auf_kopf.erfass_dat,'DD/MM/YYYY'), 
  TO_CHAR(auf_kopf.liefer_dat,'DD/MM/YYYY'), v_ord_custname.cust_name, 
  auf_pos.auf_pos, v_auf_stat_0.anz, v_reason_code_1.reason_code,
  v_reason_code_1.reason_desc,
  v_auf_pos_vmat.glas1 ||' '|| gd_basis1.gl_bez as glas1,
  auf_pos.glas2 ||' '|| gd_basis2.gl_bez as glas2,
  auf_kopf.auf_off, auf_pos.ver_art
FROM auf_kopf, auf_pos, v_auf_pos_vmat, v_auf_stat_0, v_ord_custname,
  v_reason_code_1, glas_daten_basis gd_basis1, glas_daten_basis gd_basis2
WHERE auf_kopf.erfass_dat >sysdate-7
AND auf_kopf.kopf_reason IS NOT NULL
AND (auf_kopf.auf_nr=auf_pos.auf_nr(+))
AND (auf_pos.auf_nr=v_auf_pos_vmat.auf_nr(+))
AND (auf_pos.auf_pos=v_auf_pos_vmat.auf_pos(+))
AND (auf_pos.variante=v_auf_pos_vmat.variante(+))
AND (auf_pos.auf_nr=v_auf_stat_0.auf_nr)
AND (auf_pos.auf_pos=v_auf_stat_0.auf_pos)
AND (auf_pos.variante=v_auf_stat_0.variante)
AND (auf_kopf.auf_nr=v_ord_custname.order_no)
AND (auf_kopf.auf_nr=v_reason_code_1.order_no(+))
AND (v_auf_pos_vmat.glas1 = gd_basis1.idnr(+))
AND (auf_pos.glas2 = gd_basis2.idnr(+));

我已经为该表的两个引用设置了别名,以便您可以区分它们。表的一个实例外连接到v_auf_pos_vmat,另一个外连接到auf_pos。我已经有一段时间没有使用旧的(+)表示法了,但我认为我已经把它们放在了适合你正在做的事情的正确位置......

顺便说一句,所有条件周围的括号都是不必要的,因为没有歧义需要解决。

于 2013-08-06T09:58:23.000 回答