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

Откуда:
Сообщений: 10
Товарищи, чего то я совсем запутался. Вот такой запрос:
SELECT 
	Ter1.t1name, MAX(Ter2.summ)
FROM 
	t1 AS Ter1
		INNER JOIN 
	t2 AS Ter2
	ON Ter1.idt1 = Ter2.idt1
GROUP BY Ter1.idt1,Ter1.t1name
ORDER BY Ter2.summ;

При запуске ругается на то, что t2.summ не присутствует ни в агрегатах, ни в GROUP BY. Т.е. ORDER BY почему то не по алиасу смотрит, а по реальному имени таблицы. Если сделать строку "ORDER BY summ", то в MS SQL 2012 работает, в MS SQL 2008 ругается.
Может кто знает, в чем прикол?

Таблицы самые простые, на коленке писаные:
CREATE TABLE dbo.t1(
idt1 INT PRIMARY KEY NOT NULL
,t1name NVARCHAR(20) NOT NULL
)
CREATE TABLE dbo.t2(
idt2 INT NOT NULL
,idt1 INT NOT NULL
	CONSTRAINT fk_idt1 FOREIGN KEY(idt1) REFERENCES dbo.t1(idt1)
,summ INT NOT NULL
)

INSERT INTO dbo.t1 VALUES (1,'Ivan'),(2,'NeIvan'),(3,'Ivan')
INSERT INTO dbo.t2 VALUES (1,2,5),(2,1,7),(3,3,14)
12 ноя 13, 16:44    [15116677]     Ответить | Цитировать Сообщить модератору
 Re: непонятное поведение Order BY  [new]
Glory
Member

Откуда:
Сообщений: 104751
JAVARookie
Т.е. ORDER BY почему то не по алиасу смотрит, а по реальному имени таблицы.

А вы где-то задали алиас ?
Здесь - ORDER BY Ter2.summ - вы указали именно имя таблицы и поля в нем
12 ноя 13, 16:49    [15116716]     Ответить | Цитировать Сообщить модератору
 Re: непонятное поведение Order BY  [new]
Гость333
Member

Откуда:
Сообщений: 3683
JAVARookie
Если сделать строку "ORDER BY summ", то в MS SQL 2012 работает

Вот прям выложенные вами скрипты работают? Не верю.
автор
Msg 8127, Level 16, State 1, Line 9
Column "t2.summ" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.


Надо писать
ORDER BY MAX(Ter2.summ)
12 ноя 13, 16:49    [15116718]     Ответить | Цитировать Сообщить модератору
 Re: непонятное поведение Order BY  [new]
JAVARookie
Member

Откуда:
Сообщений: 10
UPD
Если сделать
MAX(Ter2.summ) AS s
и
ORDER BY s
- все работает, это понятно. Но почему не проходит без алиасов?
12 ноя 13, 16:49    [15116720]     Ответить | Цитировать Сообщить модератору
 Re: непонятное поведение Order BY  [new]
Glory
Member

Откуда:
Сообщений: 104751
JAVARookie
Но почему не проходит без алиасов?

Потому что вы не задали вычисляемому полю алиаса
12 ноя 13, 16:51    [15116737]     Ответить | Цитировать Сообщить модератору
 Re: непонятное поведение Order BY  [new]
JAVARookie
Member

Откуда:
Сообщений: 10
Glory
JAVARookie
Т.е. ORDER BY почему то не по алиасу смотрит, а по реальному имени таблицы.

А вы где-то задали алиас ?
Здесь - ORDER BY Ter2.summ - вы указали именно имя таблицы и поля в нем


Ter2 - это алиас для t2.
Но ведь "Ter2.summ" в MAX(Ter2.summ) и "Ter2.summ" в ORDER BY совпадают. Почему SQL серверу не нравится?



Гость333 , действительно не запускается и на 2012. Извините, что ввел в заблуждение.
12 ноя 13, 16:57    [15116791]     Ответить | Цитировать Сообщить модератору
 Re: непонятное поведение Order BY  [new]
Glory
Member

Откуда:
Сообщений: 104751
JAVARookie
Ter2 - это алиас для t2.

И причем тут алиас вычисляемого поля ?

JAVARookie
Но ведь "Ter2.summ" в MAX(Ter2.summ) и "Ter2.summ" в ORDER BY совпадают.

А то, что там еще какая-то функция MAX, так это пофиг ?
Какой алиас тогда должен быть у MAX(Ter2.summ+Ter2.idt1) - summ или idt1 ? Или может summ_idt1 ?
12 ноя 13, 17:03    [15116838]     Ответить | Цитировать Сообщить модератору
 Re: непонятное поведение Order BY  [new]
JAVARookie
Member

Откуда:
Сообщений: 10
Glory
А то, что там еще какая-то функция MAX, так это пофиг ?
Какой алиас тогда должен быть у MAX(Ter2.summ+Ter2.idt1) - summ или idt1 ? Или может summ_idt1 ?


Спасибо, теперь все логично. :)
12 ноя 13, 17:06    [15116855]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить