Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
5 / 5 / 5
Регистрация: 17.12.2013
Сообщений: 200
1

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

24.09.2014, 14:11. Просмотров 779. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2014, 14:11
Ответы с готовыми решениями:

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

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

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

Управление соединениями с БД
Я сам не так давно начал работать с .NET, вроде пока еще чайник. Возник у меня тут один вопрос....

2
485 / 297 / 36
Регистрация: 22.06.2011
Сообщений: 929
24.09.2014, 17:52 2
Лучший ответ Сообщение было отмечено 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
Сообщений: 200
25.09.2014, 11:39  [ТС] 3
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.09.2014, 11:39

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.