質問: SQLでデータを抽出、表示が出来たのですが(null)が大量に表示されてしまい実行結果が膨らんでしまいました。 下記の様なコードです。 ''' select STF.STF_NAME, case KBN.SBT_CD when 'SECNAME1' then KBN.KBN_NAME else null end 部署, case KBN.SBT_CD when 'POSNAME1' then KBN.KBN_NAME else null end 役職, case KBN.SBT_CD when 'STFKBN01' then KBN.KBN_NAME else null end 社員区分 from HL_STF_MSTR STF left join HL_KBN_MSTR KBN on(STF.SEC_CD=KBN_CD or STF.POS_CD=KBN_CD or STF.STF_KBN=KBN_CD) --order by --STF.SEC_CD asc, --STF.POS_CD asc, --STF.ENTER_DATE asc ; ''' 以下に記すのがSQL Developerで実行して表示された結果です。 ''' システム部 取締役社長 社員 営業部 取締役部長 社員 システム部 部長 社員 システム部事業推進課 課長 社員 管理部管理課 課長 社員 システム部システム課 主任 社員 システム部事業推進課 リーダー 社員 システム部システム課 課長 社員 システム部事業推進課 一般 社員 システム部事業推進課 一般 社員 システム部システム課 一般 社員 システム部システム課 一般 社員 システム部事業推進課 一般 社員 システム部システム課 一般 社員 システム部事業推進課 一般 社員 システム部システム課 一般 社員 システム部事業推進課 一般 社員 システム部システム課 一般 社員 システム部事業推進課 一般 社員 システム部 一般 契約社員 システム部システム課 一般 社員 システム部システム課 一般 社員 システム部事業推進課 一般 社員 システム部事業推進課 一般 社員 一般 契約社員 管理部管理課 契約社員 契約社員 システム部システム課 一般 契約社員 システム部事業推進課 一般 契約社員 管理部管理課 一般 管理部管理課 一般 システム部 取締役部長 社員 ''' 表示が出来ていないのですが大量に(NULL)が紛れています。 この大量の(NULL)を削除するにはどうすれば良いのでしょうか? 例に示すと以下のとおりです。 ''' Aさん システム部 (null) (null) Aさん (null) 取締役部長 (null) Aさん (null) (null) 社員 ''' このように3行かけてしまっているのでこれを1行で示したいです。 以下に記すのが大まかな情報です。 社員マスタ、部署マスタ、役職マスタよりデータを抽出する。 抽出項目: 氏名 部署名 役職名 ※社員区分が正社員以外は「役職名+*」(例:一般*) 条件: なし。 ソート順: 部署コード(昇順) 役職コード(昇順) 入社日(昇順) どなたか宜しくお願いします。
回答: パッと見ではエラーは発生しなさそうですけど、エラーがあるとすれば属性の不一致くらいかな。 条件判定や結合条件などでエラーなのかもしれません。 何れにせよ、sql*plusなどのDBツールで実行してどのようなエラーなのかを確認して下さい。 追記 > > ORA-00904: "KBN"."SEC_CD": 無効な識別子です。 > > > HL_KBN_MSTRテーブルにSEC_CDというカラムは無いと言われています。 テーブルレイアウトを確認して下さい。 追記2 > > 表示が出来ていないのですが大量に(NULL)が紛れています。 > > この大量の(NULL)を削除するにはどうすれば良いのでしょうか? > > > 結合方法が誤っています。 多分以下の様な事だと思います。 ``` select STF.STF_NAME, KBN1.KBN_NAME 部署, KBN2.KBN_NAME 役職, KBN3.KBN_NAME 社員区分 from HL_STF_MSTR STF left join HL_KBN_MSTR KBN1 on(STF.SEC_CD=KBN1.KBN_CD and KBN1.SBT_CD='SECNAME1') left join HL_KBN_MSTR KBN2 on(STF.POS_CD=KBN2.KBN_CD and KBN2.SBT_CD='POSNAME1') left join HL_KBN_MSTR KBN3 on(STF.STF_KBN=KBN3.KBN_CD and KBN3.SBT_CD='STFKBN01') order by STF.SEC_CD asc, STF.POS_CD asc, STF.ENTER_DATE asc ; ```