Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Расчет MAX в дочерней таблице по условию родительской  [new]
Студент1918
Guest
Добрый день, форумчане!

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

Есть родительская таблица Table1
ID A B
125
273

И есть дочерняя таблица Table 2
ID ID_Table1 X1 X2
112.34.5
217.26.5
324.37.2
429.18.6

Нужно составить запрос, который для каждой записи Table1 находил запись с максимальным значением X из Table2, причем если A>B, то надо искать MAX по полю X1, а если A<B, то надо искать запись по полю X2.

Т. е., для нашего примера, должно получиться:
IDABX
1256.5
2739.1
17 янв 18, 17:26    [21114570]     Ответить | Цитировать Сообщить модератору
 Re: Расчет MAX в дочерней таблице по условию родительской  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36692
Что подсказать-то? Готовый ответ?
17 янв 18, 17:28    [21114571]     Ответить | Цитировать Сообщить модератору
 Re: Расчет MAX в дочерней таблице по условию родительской  [new]
Студент1918
Guest
Если, можно, то да, готовый ответ. Или что, я делаю не так.

Я пытаюсь так:
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.
17 янв 18, 17:47    [21114622]     Ответить | Цитировать Сообщить модератору
 Re: Расчет MAX в дочерней таблице по условию родительской  [new]
Студент1918
Guest
Получилось,

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


Но может быть можно как-то попроще?
17 янв 18, 18:06    [21114644]     Ответить | Цитировать Сообщить модератору
 Re: Расчет MAX в дочерней таблице по условию родительской  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
Студент1918,
проще и нагляднее написать запрос через UNION ALL. половина для A>B половина для A<B.

Что для А=В?
17 янв 18, 18:20    [21114668]     Ответить | Цитировать Сообщить модератору
 Re: Расчет MAX в дочерней таблице по условию родительской  [new]
Студент1918
Guest
Что для А=В?

В нашем случае такого невозможно.

Подскажите, пожалуйста, как можно сделать через UNION?
17 янв 18, 18:26    [21114679]     Ответить | Цитировать Сообщить модератору
 Re: Расчет MAX в дочерней таблице по условию родительской  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Студент1918, мдя, плохо вас учили, хоть и 100 лет, судя по нику.

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
17 янв 18, 18:30    [21114683]     Ответить | Цитировать Сообщить модератору
 Re: Расчет MAX в дочерней таблице по условию родительской  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Студент1918,
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
17 янв 18, 18:30    [21114684]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить