Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Расчет MAX в дочерней таблице по условию родительской / 8 сообщений из 8, страница 1 из 1
17.01.2018, 17:26
    #39585987
Студент1918
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет MAX в дочерней таблице по условию родительской
Добрый день, форумчане!

Подскажите, пожалуйста.

Есть родительская таблица Table1
ID A B125273
И есть дочерняя таблица Table 2
ID ID_Table1 X1 X2112.34.5217.26.5324.37.2429.18.6
Нужно составить запрос, который для каждой записи Table1 находил запись с максимальным значением X из Table2, причем если A>B, то надо искать MAX по полю X1, а если A<B, то надо искать запись по полю X2.

Т. е., для нашего примера, должно получиться:
IDABX1256.52739.1
...
Рейтинг: 0 / 0
17.01.2018, 17:28
    #39585988
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет MAX в дочерней таблице по условию родительской
Что подсказать-то? Готовый ответ?
...
Рейтинг: 0 / 0
17.01.2018, 17:47
    #39585999
Студент1918
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет MAX в дочерней таблице по условию родительской
Если, можно, то да, готовый ответ. Или что, я делаю не так.

Я пытаюсь так:
Код: sql
1.
2.
3.
4.
5.
6.
select a.A,a.B, b.x
from   dbo.Table_1 a
cross apply
 (
 select MAX(CASE WHEN a.A > a.B THEN X1 ELSE X2 END ) as x from dbo.Table_2 WHERE Table1_ID = a.ID
 ) b



Но получаю ошибку

Multiple columns are specified in an aggregated expression containing an outer reference. If an expression being aggregated contains an outer reference, then that outer reference must be the only column referenced in the expression.
...
Рейтинг: 0 / 0
17.01.2018, 18:06
    #39586007
Студент1918
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет MAX в дочерней таблице по условию родительской
Получилось,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select A, B, CASE WHEN A>B THEN x1 ELSE x2 END as x
FROM (
	select a.A,a.B, b.x1, b.x2
	from   dbo.Table_1 a
	cross apply
	(
	select MAX(X1 ) as x1, MAX(X2) as x2 from dbo.Table_2 WHERE Table1_ID = a.ID
	) b ) d



Но может быть можно как-то попроще?
...
Рейтинг: 0 / 0
17.01.2018, 18:20
    #39586015
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет MAX в дочерней таблице по условию родительской
Студент1918,
проще и нагляднее написать запрос через UNION ALL. половина для A>B половина для A<B.

Что для А=В?
...
Рейтинг: 0 / 0
17.01.2018, 18:26
    #39586020
Студент1918
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет MAX в дочерней таблице по условию родительской
Что для А=В?
В нашем случае такого невозможно.

Подскажите, пожалуйста, как можно сделать через UNION?
...
Рейтинг: 0 / 0
17.01.2018, 18:30
    #39586022
Minamoto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет MAX в дочерней таблице по условию родительской
Студент1918, мдя, плохо вас учили, хоть и 100 лет, судя по нику.

Код: sql
1.
2.
3.
4.
5.
select t.Id, t.a, t.b
     ,  max(case when a > b then t2.x1 when a < b then x2 else null end) as x
from Table1 as t
        inner join Table2 as t2 on t.Id = t2.ID_Table1
group by t.Id, t.a, t.b
...
Рейтинг: 0 / 0
17.01.2018, 18:30
    #39586023
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расчет MAX в дочерней таблице по условию родительской
Студент1918,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 
	a.A, 
	a.B, 
	MAX(CASE WHEN a.A > a.B THEN X1 ELSE X2 END ) as x 
FROM  
	dbo.Table1  a
INNER JOIN
	dbo.Table2 b 
ON 
	b.ID_Table1 = a.ID
GROUP BY a.A, a.B
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Расчет MAX в дочерней таблице по условию родительской / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]