Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сверка двух таблиц по нескольким параметрам и формирование итоговых результатов  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Добрый вечер
Может кто подскажет, где я допустил ошибку, но результат такого вычисления получается заведомо не верным
Задание: с двух таблиц 2012 и 2013, нужно получить итоговую сумму по полю [76] и количество по полю [ContractNumber] с таблицы 2013 в разрезе поля [LB1], когда выполняются условия:
t1. [INSURER] = t2. [INSURER]
t1. [Vid] = t2. [Vid]
t1. [Object] = t2.[Object]
t1.[RegistrationNumber] = t2.[RegistrationNumber]

А в итоге получаются значения, превышающие по некоторым групамм поля LB1]
(новичек, просьба не хаять:)


SELECT t1.[LB1] as 'ЛБ1_2013', count (t1.[ContractNumber]) as 'Количество_лонгированных_договора_2013', sum(t1.[76]) as 'Начислено_76_2013'
FROM
[BD_REPORT].[dbo].[76-2013(9)] as t1
LEFT JOIN [BD_REPORT].[dbo].[76-2012] as t2
ON t1. [INSURER] = t2. [INSURER] and t1. [Vid] = t2. [Vid] and t2. [Object] = t1.[Object] and t1.[RegistrationNumber] = t2.[RegistrationNumber]
WHERE t1. [DateBegin] - t2.[DateEnd] <=30
group by t1.[LB1]
17 дек 13, 20:07    [15307290]     Ответить | Цитировать Сообщить модератору
 Re: Сверка двух таблиц по нескольким параметрам и формирование итоговых результатов  [new]
sdet
Member

Откуда:
Сообщений: 463
googlogmob,
И где вы получаете сумму и количество по полю 76 из 2 таблицы для сверки?
17 дек 13, 20:20    [15307332]     Ответить | Цитировать Сообщить модератору
 Re: Сверка двух таблиц по нескольким параметрам и формирование итоговых результатов  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
sdet
googlogmob,
И где вы получаете сумму и количество по полю 76 из 2 таблицы для сверки?


Задача в том, чтобы получить сумму по полю 76 и количество контрактов по договорам 2013, которых нет в 2012. То есть знать сумму 76 и количество контрактов в 2012 не нужно
17 дек 13, 20:33    [15307355]     Ответить | Цитировать Сообщить модератору
 Re: Сверка двух таблиц по нескольким параметрам и формирование итоговых результатов  [new]
Добрый Э - Эх
Guest
googlogmob
которых нет в 2012
not exists
17 дек 13, 20:38    [15307366]     Ответить | Цитировать Сообщить модератору
 Re: Сверка двух таблиц по нескольким параметрам и формирование итоговых результатов  [new]
sdet
Member

Откуда:
Сообщений: 463
googlogmob
sdet
googlogmob,
И где вы получаете сумму и количество по полю 76 из 2 таблицы для сверки?


Задача в том, чтобы получить сумму по полю 76 и количество контрактов по договорам 2013, которых нет в 2012. То есть знать сумму 76 и количество контрактов в 2012 не нужно

Если вы выбрали left join то необходимо добавить условие проверки на null для второй таблице
17 дек 13, 20:39    [15307369]     Ответить | Цитировать Сообщить модератору
 Re: Сверка двух таблиц по нескольким параметрам и формирование итоговых результатов  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
googlogmob
sdet
googlogmob,
И где вы получаете сумму и количество по полю 76 из 2 таблицы для сверки?


Прошу прощения. верно задача формулируется так:

Нужно получить сумму по полю 76 и количество контрактов с таблицы 2013, которые есть в 2012. То есть знать сумму 76 и количество контрактов в 2012 не нужно
17 дек 13, 21:30    [15307513]     Ответить | Цитировать Сообщить модератору
 Re: Сверка двух таблиц по нескольким параметрам и формирование итоговых результатов  [new]
sdet
Member

Откуда:
Сообщений: 463
googlogmob
googlogmob
пропущено...


Прошу прощения. верно задача формулируется так:

Нужно получить сумму по полю 76 и количество контрактов с таблицы 2013, которые есть в 2012. То есть знать сумму 76 и количество контрактов в 2012 не нужно

тогда inner join
17 дек 13, 21:38    [15307550]     Ответить | Цитировать Сообщить модератору
 Re: Сверка двух таблиц по нескольким параметрам и формирование итоговых результатов  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Вроде решил вот таким способом:

SELECT t1.LB1, [insurer], sum(t1.[76]) as 'Начислено_76_2013' , count ([ContractNumber])
FROM [BD_REPORT].[dbo].[76-2013] as t1
WHERE EXISTS
(SELECT *
FROM [BD_REPORT].[dbo].[76-2012] as t2
WHERE t1. [INSURER] = t2. [INSURER] and t1. [Vid] = t2. [Vid] and t2. [Object] = t1.[Object] and t1.[RegistrationNumber] = t2.[RegistrationNumber])
group by t1.[LB1] , [insurer]

По паре примеров вроде верно, но нужно проверить
17 дек 13, 21:58    [15307655]     Ответить | Цитировать Сообщить модератору
 Re: Сверка двух таблиц по нескольким параметрам и формирование итоговых результатов  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Добрый день
В процессе промышленной эксплуатации возникла необходимость немного изменить код
А именно:
каким образом в первом SELECT выбрать некоторые поля с t2? Если это возможно.
Или какие могут быть альтернативные подходы для решения этой задачи, при котором будет соблюдаться этот принцип отбора.
Буду очень благодарен за помощь.

SELECT
year (t1.[DateContract]) as 'Год заключения' , month (t1.[DateContract]) as 'Месяц заключения', t1.lb1 as 'ЛБ1', t1.lb2 as 'ЛБ2', t1.lb3 as 'ЛБ3', t1.ContractNumber as 'Номер договора', t1.Insurer as 'Страхователь', t1.Beneficiary as 'Выгодопреобретатель', t1.ExternalChannel as 'Внешний канал', t1.[RegistrationNumber] as 'Номерной знак', t1.[SumPaymentTotal] as 'Страховая премия по договору', sum(t1.[76]) as 'Начислено счет 76.1'

FROM [BD_REPORT].[dbo].[76-2013(11)temp] as t1
WHERE EXISTS
(SELECT *
FROM [BD_REPORT].[dbo].[76-2012] as t2
WHERE t1. [INSURER] = t2. [INSURER] and t1. [Vid] = t2. [Vid] and t2. [Object] = t1.[Object]
and t1.[RegistrationNumber] = t2.[RegistrationNumber] and t2.[ContractNumber] != t1.[ContractNumber]
and t1.vid like N'%транспорту, кр%' and t1.[DateContract] between '20130101' and '20131231' and t2.[DateContract] between '20120101' and '20121231' )



group by year (t1.[DateContract]), month (t1.[DateContract]), t1.lb1, t1.lb2, t1.lb3 , t1.ContractNumber, t1.Insurer ,t1.Beneficiary, t1.ExternalChannel , t1.[RegistrationNumber], t1.[SumPaymentTotal]
order by year (t1.[DateContract]), month (t1.[DateContract])
23 дек 13, 11:45    [15332764]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить