Member 11658469 Ответов: 1

Запрос Oracle, чтобы избежать дубликатов


Привет Команда,

Table1

AccNo	TRNO	AMOUNT
123	123	100
1234	1234	50
12345	12345	50

Table2
AccNO	CODE
123	A
123	I
1234	A
12345	I

Need the O/P like below

AccNo	TRNO	AMOUNT
123	123	100
1234	1234	50
12345	12345	50


Нужно объединить 2 таблицы и получить выходные данные, как уже упоминалось.

Что я уже пробовал:

SELECT DISTINCT(AccNo),TRNO,AMOUNT 
FROM Table1 T1 JOIN
Table2 T2 ON T1.AccNo=T2.AccNo

CHill60

А что не так с кодом, который вы только что опубликовали?

1 Ответов

Рейтинг:
0

CHill60

Хорошо, единственная проблема, которую я могу найти с вашим кодом, заключается в том, что столбец AccNo в DISTINCT(AccNo) неоднозначный.

Другими словами, Oracle не может определить, имели ли вы в виду AccNo в Table1 или тот, что внутри Table2.

Так что просто дайте Oracle знать, какой из них использовать.

SELECT DISTINCT(T1.AccNo),TRNO,AMOUNT 


Member 11658469

Привет
Мой фактический код скопирован ниже.
ВЫБЕРИТЕ ЧЕТКУЮ ВЕРХНЮЮ(PAYMENTLOCATION) КАК PAYMENTLOCATION,ВЕРХНИЙ(CREDITCARDTYPE) КАК CREDITCARDTYPE,
СЛУЧАЙ, КОГДА ВЕРХНИЙ(PM.PAYMENTLOCATION) В ('SHAMELSIMSIM','AUB','AUBSIMSIM','BSB','BBKSIMSIM','HSB','KHB','KHBSIMSIM','NBB','NBBSIMSIM','SBB','SCBSIMSIM','BBK') ЗАТЕМ
Случай, когда COUNT(T4.SERVICENO) OVER (partition by '973' || PM.ACCOUNT_NUMBER) > 0
ЗАТЕМ ГРАФ(ПМ.TRANSACTION_NUMBER) НАД (РАЗДЕЛ ПО ВЕРХНЕЙ(ПМ.PAYMENTLOCATION) ,ВЕРХНИЙ(ПМ.CREDITCARDTYPE))
ИНАЧЕ 0 КОНЕЦ ИНАЧЕ 0 КОНЕЦ КАК DB_SIMSIM_COUNT,
СЛУЧАЙ, КОГДА ВЕРХНИЙ(PM.PAYMENTLOCATION) В ('SHAMELSIMSIM','AUB','AUBSIMSIM','BSB','BBKSIMSIM','HSB','KHB','KHBSIMSIM','NBB','NBBSIMSIM','SBB','SCBSIMSIM','BBK') ТОГДА
Случай, когда COUNT(T4.SERVICENO) OVER (partition by '973' || PM.ACCOUNT_NUMBER) > 0
ТОГДА СУММА(ТЧ.СУММА) OVER (РАЗДЕЛ ПО PM.PAYMENTLOCATION,UPPER(PM.CREDITCARDTYPE))
ИНАЧЕ 0 КОНЕЦ ИНАЧЕ 0 КОНЕЦ КАК DB_SIMSIM_SUM
ОТ PAYMENTS_LOG_ALL_V PM
ВНУТРЕННЕЕ СОЕДИНЕНИЕ BSS_DATA.BSS_ASSET_INFO Т4 на '973' || ПМ.НОМЕР_АККАУНТА = Т4.SERVICENO и Т4.Assettype = 'Mobile_Prepaid и Т4.ASSET_STATUS = 'активный' и ПМ.BILL_PROFILE_ID ИМЕЕТ ЗНАЧЕНИЕ NULL
ГДЕ ВЕРХНИЙ(PM.PAYMENTLOCATION) В ('SHAMELSIMSIM','AUB','AUBSIMSIM','BSB','BBKSIMSIM','HSB','KHB','KHBSIMSIM','NBB','NBBSIMSIM','SBB','SCBSIMSIM','BBK')
И T4.Assettype = 'Mobile_Prepaid'

Здесь в таблице Т4 один столбец кода, который придет 1 или 2 для одного и того же СЕРВИСЕНО в одной и той же таблице.Из-за того, что этот код появляется дважды, мы не можем получить правильные данные(сумму) с помощью запроса.Значит для какой-то услуги, если 2 кода с находятся там в два раза больше количества транзакций и суммы берется.Мне нужно избежать второй записи.Если SERVICENO одинакова для кодов, то один раз сумма будет взята на основе одного и того же условия в запросе.
Пожалуйста помочь

CHill60

Почему бы просто не включить в предложение WHERE

AND T4.SERVICENO = 1
или я что-то упускаю?