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

Запрос с двумя соединениями outer apply

24.09.2014, 14:11. Показов 1880. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не нашел пример как применить два соединения
Использования такого запроса не возвращает строки с пустыми значениями функции sum(k.SumKB)
Возможно, запрос с двумя соединениями outer apply нужно составить по другому?

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
DECLARE @Datefrom date, @Datetill date;
SET  @Datefrom = '20141001'
SET  @Datetill = '20141030';   
 
      SELECT
           t.ContractNumber as 'Договор'
          ,sum(t.[76]) as 'Начислено'
          ,u.Возмещение 
          ,y.КВ as 'КВ'
          ,sum(t.[76]) - u.Возмещение -y.КВ  as 'Результат'
          ,t.DateBegin as 'Дата начала'
          ,t.DateEnd as 'Дата окончания'
          ,v.vid as 'Вид'
 
 
     FROM [data].[dbo].[76] t
      left join [Plans].[dbo].[vid_mask] v on t.vid like v.mask
      outer apply (SELECT sum(l.SumCompensation) FROM [data].[dbo].[loss_opl] l where t.ContractNumber=l.ContractNumber and t.Vid=l.Vid) as u (Возмещение)
      outer apply (SELECT sum(k.SumKB) FROM [data].[dbo].[kb] k where t.ContractNumber=k.ContractNumber and t.Vid=k.Vid) as y (КВ)
     WHERE t.DateEnd between @Datefrom a
     GROUP BY 
           t.ContractNumber
          ,u.Возмещение 
          ,y.КВ
          ,t.DateBegin
          ,t.DateEnd
          ,v.vid 
    HAVING sum(t.[76]) <= (u.Возмещение+y.КВ )
    ORDER BY    
           t.DateEnd 
          ,4 asc
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2014, 14:11
Ответы с готовыми решениями:

Оптимизировать и распространить скрипты с OUTER APPLY и LEFT OUTER JOIN
Люди добрые, подскажите кто что сможет, пожалуйста! На картинках (если я правильно сумел их прикрепить) я отобразил результат своей...

SQL запрос с OUTER JOIN
Есть две таблицы с одинаковыми полями. Надо выбрать все записи из первой таблицы которых нет во второй (или чем-то отличаются). Сделала...

Послать POST запрос запрос с двумя и более параметрами?
Делаю так: string ProxyString = &quot;&quot;; string URI = @&quot;http://www.easyprog.ru/test.php&quot;;; string...

2
 Аватар для Ice_and_Fire
512 / 298 / 37
Регистрация: 22.06.2011
Сообщений: 929
24.09.2014, 17:52
Лучший ответ Сообщение было отмечено googlogmob как решение

Решение

Apply нормально применен, outer apply это не cross apply

Отсекает вот тут
T-SQL
1
HAVING sum(t.[76]) <= (u.Возмещение+y.КВ )
Ибо NULL значения не меньше и не равны ни чему
Переписываем тут:
T-SQL
1
SELECT COALESCE(sum(k.SumKB),0) FROM [data].[dbo].[kb]
Добавлено через 7 минут
А лучше тут

T-SQL
1
 HAVING sum(t.[76]) <= (u.Возмещение+COALESCE(y.КВ,0) )
Добавлено через 10 минут
Отставить второй вариант )
1
5 / 5 / 5
Регистрация: 17.12.2013
Сообщений: 202
25.09.2014, 11:39  [ТС]
Ice_and_Fire, Спасибо дружище за подробный ответ))
подправил having, теперь не отсекаются null-значения
а чтобы и в результирующей таблице не фигурировали null, изложил тоже с COALESCE:
T-SQL
1
2
3
4
5
6
7
8
9
SELECT
           t.ContractNumber as 'Договор'
          ,sum(t.[76]) as 'Начислено'
          ,u.Возмещение
          ,COALESCE(y.КВ,0) as 'КВ'
          ,sum(t.[76]) - u.Возмещение - COALESCE(y.КВ,0)  as 'Результат'
          ,t.DateBegin as 'Дата начала'
          ,t.DateEnd as 'Дата окончания'
          ,v.vid as 'Вид'
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.09.2014, 11:39
Помогаю со студенческими работами здесь

Управление соединениями с БД
Я сам не так давно начал работать с .NET, вроде пока еще чайник. Возник у меня тут один вопрос. Есть веб-приложение (ASP.Net + C#)...

Работа с соединениями
Добрый день. :senor: Понадобилась функция перехвата сообщения о новом сетевом подключении, причем не важно интернет подключение или...

Запрос с двумя таблицами
Здравствуйте, помогите составить SQL запрос с двумя таблицами(Access база). Имеются 2 таблицы(рис 1.jpg) с одинаковыми полями, в первой...

Запрос с двумя insert
Всем привет, подскажите возможно ли в одном запросе добавить данные в 2 таблицы базы? если можно, то как?

Запрос LIKE с двумя параметрами
Здравствуйте для того чтобы найти данные по 2 столбцам использую такой запрос: SELECT ID, , Адресс FROM ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru