Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
5 / 5 / 5
Регистрация: 17.12.2013
Сообщений: 202

Сверка двух таблиц по нескольким параметрам и формирование итоговых результатов

17.12.2013, 20:10. Показов 4738. Ответов 11
Метки нет (Все метки)

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

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


SQL
1
2
3
4
5
6
7
 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]
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.12.2013, 20:10
Ответы с готовыми решениями:

Сверка данных из двух Таблиц.
Вопрос у меня такой. Есть две таблицы(тест1 и Тест2),в них два столбца QUEST и B1. Так вот требуется сверить все эти данные...

Как правильно сделать сравнение двух объектов по нескольким параметрам?
Доброго времени суток. Столкнулся тут с проблемкой - ничего не могу :( Сравниваю два объекта по его свойствам. Написал вот такой кодик ...

Сравнение двух таблиц по минимальным параметрам
Здравствуйте дорогие форумчане, не могу справится с задачей, а конкретно сравнить две таблицы вбитую вручную и выгруженную с 1с. ...

11
20 / 20 / 1
Регистрация: 03.01.2013
Сообщений: 184
18.12.2013, 06:23
SUM(t1.[76]) over (partition by t1.[LB1]) as 'sum'

в разрезе поля LB1
0
5 / 5 / 5
Регистрация: 17.12.2013
Сообщений: 202
18.12.2013, 12:18  [ТС]
Решил пойти другим путем
Может кто подскажет, эт о верное решение?

SQL
1
2
3
4
5
6
7
SELECT t1.LB1,  SUM(t1.[76]) AS 'Начислено_76_2013' , COUNT ([ContractNumber])
FROM [ALFASAO_REPORT].[dbo].[76-2013(9)] AS t1
WHERE EXISTS
    (SELECT * 
     FROM [ALFASAO_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]
0
1 / 1 / 0
Регистрация: 01.06.2013
Сообщений: 26
20.12.2013, 12:02
Не совсем понял что тебе нужно.
нужно получить итоговую сумму по полю [76] из t1 и количество значений ContractNumber в t1? Зачем тогда t2?
0
5 / 5 / 5
Регистрация: 17.12.2013
Сообщений: 202
20.12.2013, 12:10  [ТС]
Цитата Сообщение от mif_zp Посмотреть сообщение
Не совсем понял что тебе нужно.
нужно получить итоговую сумму по полю [76] из t1 и количество значений ContractNumber в t1? Зачем тогда t2?
В моем последнем посте итоговый вариант кода. С первого поста код переиписан заново
0
1 / 1 / 0
Регистрация: 01.06.2013
Сообщений: 26
20.12.2013, 12:55
Ну а как я тебе скажу верное ли решение, если не пойму что вообще нужно.
Мой вопрос был по заданию и эта фраза
Цитата Сообщение от googlogmob Посмотреть сообщение
В моем последнем посте итоговый вариант кода. С первого поста код переиписан заново
на него не отвечает)
0
5 / 5 / 5
Регистрация: 17.12.2013
Сообщений: 202
20.12.2013, 23:53  [ТС]
Цитата Сообщение от mif_zp Посмотреть сообщение
Ну а как я тебе скажу верное ли решение, если не пойму что вообще нужно.
Мой вопрос был по заданию и эта фраза
на него не отвечает)

нужно посчитать сумму 76 с т1 по тем договорам, которые соответствуют договорам с т2 по критериям [INSURER] = t2. [INSURER] and t1. [Vid] = t2. [Vid] and t2. [Object] = t1.[Object] and t1.[RegistrationNumber] = t2.[RegistrationNumber])
0
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
21.12.2013, 11:20
Цитата Сообщение от googlogmob Посмотреть сообщение
Решил пойти другим путем
Может кто подскажет, эт о верное решение?

SQL
1
2
3
4
5
6
7
SELECT t1.LB1,  SUM(t1.[76]) AS 'Начислено_76_2013' , COUNT ([ContractNumber])
FROM [ALFASAO_REPORT].[dbo].[76-2013(9)] AS t1
WHERE EXISTS
    (SELECT * 
     FROM [ALFASAO_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]
А в чем сомнения-то? не верно считает?
Я б заменил только count (distinct [ContractNumber])

Или считает правильно, но долго?
1
5 / 5 / 5
Регистрация: 17.12.2013
Сообщений: 202
21.12.2013, 11:34  [ТС]
Цитата Сообщение от cygapb-007 Посмотреть сообщение
А в чем сомнения-то? не верно считает?
Я б заменил только count (distinct [ContractNumber])

Или считает правильно, но долго?
Просто сначала темы разрабатывал совсем другой подход. Где-то прочитал что можна через EXISTS.
Писал код сам, поэтому была вероятность ошибки
За distinct спасибо. Действительно логично
Спасибо)
0
5 / 5 / 5
Регистрация: 17.12.2013
Сообщений: 202
23.12.2013, 15:05  [ТС]
Добрый день
В процессе промышленной эксплуатации возникла необходимость немного изменить код
А именно:
каким образом в первом SELECT выбрать некоторые поля с t2? Если это возможно.
Или какие могут быть альтернативные подходы для решения этой задачи, при котором будет соблюдаться этот принцип отбора.
Буду очень благодарен за помощь.


SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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])
0
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
23.12.2013, 16:36
T-SQL
1
2
3
select a.*
from a
where exists (select * from b where b.id=a.id)
Если связь 1-1 (или 1-M и нужны все строки из b) то
T-SQL
1
2
3
select a.*, b.*
from a
join b on b.id=a.id
Если связь 1-M и нужна одна строка из b то
T-SQL
1
2
3
select a.*, b.*
from a
cross apply(select top(1) * from b where b.id=a.id)b
1
5 / 5 / 5
Регистрация: 17.12.2013
Сообщений: 202
23.12.2013, 18:24  [ТС]
cygapb-007 - Спасибо за совет
вот что получилось в итоге

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT 
YEAR (t2.[DateContract]) AS 'Год заключения' , MONTH (t2.[DateContract]) AS 'Месяц заключения',  t2.lb1 AS 'ЛБ1',  t2.lb2 AS 'ЛБ2', t2.lb3 AS 'ЛБ3', 
t1.ContractNumber AS 'Номер договора 2012',   t2.ContractNumber AS 'Номер договора 2013',  t2.Insurer AS 'Страхователь', t2.Beneficiary AS 'Выгодопреобретатель',
  t2.ExternalChannel AS 'Внешний канал', t2.[RegistrationNumber] AS 'Номерной знак', t1.[SumPaymentTotal] AS 'Страховая премия по договору 2012', 
   t2.[SumPaymentTotal] AS 'Страховая премия по договору 2013',   SUM(t2.[76]) AS 'Начислено счет 76.1 2013'
 
 
 
FROM [BD_REPORT].[dbo].[76-2012] AS t1
JOIN [BD_REPORT].[dbo].[76-2013(11)temp] AS t2
    ON 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 '20120101' AND '20121130' AND t2.[DateContract] BETWEEN '20130101' AND '20131231'   
     AND (t2.Beneficiary LIKE N'%правекс%' OR t2.externalchannel LIKE N'%правекс%')
 
    
      GROUP BY  YEAR (t2.[DateContract]), MONTH (t2.[DateContract]),  t2.lb1,  t2.lb2, t2.lb3 , t1.ContractNumber, t2.ContractNumber,  t2.Insurer ,t2.Beneficiary, t2.ExternalChannel , t2.[RegistrationNumber], t1.[SumPaymentTotal],  t2.[SumPaymentTotal]  
      ORDER BY   YEAR (t2.[DateContract]), MONTH (t2.[DateContract])
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2013, 18:24
Помогаю со студенческими работами здесь

Сверка таблиц
Есть два набора данных, предположительно одинаковых, но ввиду изменений в бизнес-логике в новой версии фактические данные немного...

Сверка 2-х таблиц и изменение значения в третьей
Здравствуйте, уважаемые знатоки. Есть задача: сравнить 2-а столбца в 2-х разных таблицах на наличие совпадений, и в случае совпадения в...

SELECT по нескольким параметрам
Всем привет! Что-то подзавис на формировании запроса: mysqli_query($db, &quot;SELECT * FROM $table_name WHERE (planetID = '$planet_id' AND...

Поиск по нескольким параметрам?
Вот поиск по фамилии - RS.Find 'fam Like ' &amp; ''' &amp; strFind &amp; ''' adSearchForward А как его сделать и по фамилии и по имени...

Фильтр по нескольким параметрам
Добрый день форумчане! Есть задача сделать фильтр как на картинке. Есть группы фильтра, у каждой записи есть пользовательские поля. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru