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

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

17.12.2013, 20:10. Показов 4715. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru