如何解决oracle数据库中的join表
我有2个表,分别显示数据Item master
和BOM
。我想加入Item master as T1
和BOM as T2
之间的表以及表BOM as T3
的附加表。包含ITM_CD,ITM_TYP (1,2,3,4)
的项目主表,其中每个ITM_TYP
代表ITM_CD
上第一位的代码。我想要的东西就像下面的图片
CHILD_CD2 值替换为 CHILD_CD1 值。所以数据应该是这样的。我应该解决什么查询?我是使用oracle查询的新手。
这是我的代码;
SELECT DISTINCT
T1.ITM_CD,T2.C_ITM_CD AS CHILD_CD1,T3.C_ITM_CD AS CHILD_CD2
FROM CM_HINMO_ALL T1
INNER JOIN (SELECT P_ITM_CD,C_ITM_CD,BOM_PTN FROM SM_BOM_ALL) T2
ON T1.ITM_CD = T2.P_ITM_CD
LEFT JOIN (SELECT P_ITM_CD,BOM_PTN FROM SM_BOM_ALL) T3
ON T2.C_ITM_CD = t3.P_ITM_CD
WHERE 0=0
AND T2.BOM_PTN IN (1)
AND T1.ITM_TYP IN (1,2)
AND T1.ITM_CD = '110100370'
ORDER BY 2
解决方法
只需使用Case表达式替换值即可。
SELECT ITM_CD,CASE WHEN CHILD_CD2 IS NULL THEN CHILD_CD2 ELSE CHILD_CD1 END AS CHILD_CD1
FROM TABLE1
,
据我了解,您希望child_cd2
的值应优先于child_cd1
(如果有)。如果这个假设是正确的,那么我们可以使用coalesce
来返回第一个非null表达式以实现相同的效果。
SELECT DISTINCT
T1.ITM_CD,COALESCE(T3.C_ITM_CD,T2.C_ITM_CD) AS CHILD_CD1
FROM CM_HINMO_ALL T1
INNER JOIN SM_BOM_ALL T2
ON T1.ITM_CD = T2.P_ITM_CD
LEFT JOIN SM_BOM_ALL T3
ON T2.C_ITM_CD = t3.P_ITM_CD
WHERE T2.BOM_PTN IN (1)
AND T1.ITM_TYP IN (1,2)
AND T1.ITM_CD = '110100370'
ORDER BY 2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。