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

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

17.12.2013, 20:10. Показов 4679. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru