こんにちは:ユーザーにリンクされているメインIDコードを持つテーブルからデータを取得していますが、ユーザーが名前を変更するたびに余分なレコードが追加されます。私は、現在のユーザーと過去に使用していた古い名前のリストを取得しようとしています。私は外部結合を使用して、少なくとも1つの元の名前と1つの余分な元の名前を取得しています。ここSQLクエリから冗長データを削除する方法
select
PrimaryName.PM_PDM,
PrimaryName.PM_ID,
PrimaryName.PM_AltID,
PrimaryName.PM_Change,
PrimaryName.PM_FName,
PrimaryName.PM_LName,
OldNames1.ON_PDM,
OldNames1.ON_Change,
OldNames1.ON_ID,
OldNames1.ON_AltID,
OldNames1.ON_FName,
OldNames1.ON_LName,
OldNames2.O2_PDM,
OldNames2.O2_Change,
OldNames2.O2_ID,
OldNames2.O2_AltID,
OldNames2.O2_FName,
OldNames2.O2_LName
from
(select
S_PDM as PM_PDM,
S_ID as PM_ID,
S_FIRST_NAME as PM_FName,
S_LAST_NAME as PM_LName,
S_CHANGE_IND as PM_Change,
S_SURROGATE_ID as PM_AltID
from S
WHERE S_CHANGE_IND is null) PrimaryName,
(select
S_PDM as ON_PDM,
S_ID as ON_ID,
S_FIRST_NAME as ON_FName,
S_LAST_NAME as ON_LName,
S_CHANGE_IND as ON_Change,
S_SURROGATE_ID as ON_AltID
from S
where S_CHANGE_IND = 'N') OldNames1,
(select
S_PDM as O2_PDM,
S_ID as O2_ID,
S_FIRST_NAME as O2_FName,
S_LAST_NAME as O2_LName,
S_CHANGE_IND as O2_Change,
S_SURROGATE_ID as O2_AltID
from S
where S_CHANGE_IND = 'N') OldNames2
where (OldNames1.ON_PDM = PrimaryName.pm_pdm)
and
(OldNames1.ON_PDM = OldNames2.O2_PDM (+)
and
OldNames1.ON_AltID <> OldNames2.O2_AltID (+))
order by 2
を私の結果のサンプルです:
はここにクエリの私はちょうど1行は3つの名前に対して返さ
PM_PDM |PM_ID |PM_ID2 |PM_CHANGE |PM_FNAME |PM_LNAME |ON_PDM |ON_CHANGE |ON_ID |ON_ID2 |ON_FNAME |ON_LNAME |O2_PDM |O2_CHANGE |O2_ID2 |O2_ID |O2_FNAME |O2_LNAME
1111 |2222 |3333 | |Betty |Boop |1111 |N |2222 |4444 |Betty |Smith |1111 |N |5555 |2222 |Betty |Jones
1111 |2222 |3333 | |Betty |Boop |1111 |N |2222 |5555 |Betty |Jones |1111 |N |4444 |2222 |Betty |Smith
:
- ベティ・ブープ2。ベティ・スミス3.ベティ・ジョーンズ
今、それは私はそれが最後の結合だけど、
- ベティブープ2.Bettyスミス3.Bettyジョーンズ
- ベティブープ2.Bettyジョーンズ3.Bettyスミス
を返しています私はそれを1行に制限する方法がわかりません。クエリは想定どおりに動作していますが、1行だけを返すように編集する必要があります。
あなたは、現代のJOIN構文を使用する加入修正を古くから古くなったA、Bの代わりに構文を使用します。これにより、エラーをより明確にして見つけやすくなります。 –
問題についても説明できますか?私はあなたが何をして結果データを表示したのかを見てきましたが、結果には何の疑問も問題も見当たりません。 –
私は結果をユーザごとに1行に制限しようとしています:現在のユーザ名、最初の前のユーザ名、2番目の前のユーザ名。今すぐ、ユーザー名、最初のユーザー名と2番目のユーザー名を取得しています。また、User Name、Second User Name、First User Nameの2行目が返されます。これは理にかなっていますか? – Lyndey