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

Откуда:
Сообщений: 2031
Здравствуйте!

Пишу такой SQL-запрос
SELECT
	Т1.KodTT AS КодТТ
	Т1.Monday AS пн,
	Т1.Tuesday AS вт,
	Т1.Wednesday AS ср,
	Т1.Thursday AS чт,
	Т1.Friday AS пт,
	Т1.Saturday AS сб,
	Т1.Sunday AS вс,
	пн + вт + ср + чт + пт + сб + вс AS КоличествоПоставок
FROM	
	Т1
И он не работает. Пишет, что недопустимые имена столбцов: пн, вт, ср, чт, пт, сб и вс.

Если запрос написать с вложением
SELECT
	*,
	Т2.пн + Т2.вт + Т2.ср + T2.чт + Т2.пт + Т2.сб + Т2.вс AS КоличествоПоставок
FROM(
	SELECT
		Т1.KodTT AS КодТТ
		Т1.Monday AS пн,
		Т1.Tuesday AS вт,
		Т1.Wednesday AS ср,
		Т1.Thursday AS чт,
		Т1.Friday AS пт,
		Т1.Saturday AS сб,
		Т1.Sunday AS вс	
	FROM	
		Т1) AS Т2
, то работает

Можно ли написать запрос, если используются именованные столбцы, без вложенных запросов? Может быть какой то символ надо в названии именованных столбцов добавить?
14 дек 17, 15:30    [21034020]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
Кусочек
Guest
SELECT
	Т1.KodTT AS КодТТ
	Т1.Monday AS пн,
	Т1.Tuesday AS вт,
	Т1.Wednesday AS ср,
	Т1.Thursday AS чт,
	Т1.Friday AS пт,
	Т1.Saturday AS сб,
	Т1.Sunday AS вс,
	Т1.KodTT + Т1.Monday + 	Т1.Tuesday + 	Т1.Wednesday + Т1.Thursday + Т1.Friday + Т1.Saturday + Т1.Sunday AS КоличествоПоставок
FROM	
	Т1


Прочитайте еще раз в справке про синонимы.
14 дек 17, 15:38    [21034060]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
Massa52
Member

Откуда:
Сообщений: 373
ferzmikk,
SELECT
	Т1.KodTT AS КодТТ

А где запятая?
14 дек 17, 15:45    [21034091]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
Что мешает в первом запросе суммировать поля, а не алиасы?
Не вижу проблемы.
14 дек 17, 15:52    [21034130]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30774
ferzmikk
Можно ли написать запрос, если используются именованные столбцы, без вложенных запросов?
Нет.
14 дек 17, 16:06    [21034197]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
ferzmikk
Member

Откуда:
Сообщений: 2031
alexeyvg
ferzmikk
Можно ли написать запрос, если используются именованные столбцы, без вложенных запросов?
Нет.
Что самое интересное, что Access-ий SQL так может.
15 дек 17, 07:15    [21035564]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30774
ferzmikk
alexeyvg
пропущено...
Нет.
Что самое интересное, что Access-ий SQL так может.
Вы же задавали вопрос про MSSQL? Нужно было ответить "да, можно в Access"? :-)
15 дек 17, 10:09    [21035908]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
iii2
Member

Откуда:
Сообщений: 202
alexeyvg
ferzmikk
Можно ли написать запрос, если используются именованные столбцы, без вложенных запросов?
Нет.

СТЕ можно использовать, или view.
Хотя, оно, конечно, по смыслу всё равно вложенные запросы...
17 дек 17, 07:19    [21040205]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
bideveloper
Member

Откуда:
Сообщений: 484
Кстати, интересно, почему в MSSQL не реализуют такую возможность? Вроде, это не сложно, и упростило бы синтаксис многих запросов. Понимаю, что могут быть циклические ссылки, но на это тоже легко сделать проверки.
17 дек 17, 07:30    [21040214]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
iii2
Member

Откуда:
Сообщений: 202
bideveloper
Кстати, интересно, почему в MSSQL не реализуют такую возможность? Вроде, это не сложно, и упростило бы синтаксис многих запросов. Понимаю, что могут быть циклические ссылки, но на это тоже легко сделать проверки.

Ага. Добавили бы что-то типа алиаса self для обозначения текущего набора полей выборки, и вперед.
Только, боюсь , извратят идею на корню. Тут же начнут стонать, почему это не работает в lag/lead и прочих оконных (например), а понимание логики такого запроса сможет добавить массу седых волос.
Короче, иногда смотришь на какой-нибудь вычурный case, результатом вычисления которого нужно воспользоваться еще в паре полей той же записи - и хочется. А как понимаешь, что тебе потом разбирать понаписанное - и не хочется.
)))
17 дек 17, 07:43    [21040222]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
Поля из списка SELECT обрабатываются в произвольном порядке.
Ясно, что выражение в списке не может зависеть от другого выражения в этом же списке.
17 дек 17, 16:38    [21040755]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
iii2,

И поэтому, я, почти всегда, свой код на SQL прогоняю через C препроцессор )
17 дек 17, 19:03    [21040927]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30774
bideveloper
Кстати, интересно, почему в MSSQL не реализуют такую возможность? Вроде, это не сложно, и упростило бы синтаксис многих запросов. Понимаю, что могут быть циклические ссылки, но на это тоже легко сделать проверки.
Я понимаю осторожность сиквельной команды, достаточно посмотреть, во что превратился лаконичный и простой C++ :-)
Хотя, наверное, можно было бы, только разрешать определение алиаса только один раз, и не разрешать дубликаты
И код перестанет быть совместим с сиквелом, потому что сейчас можно их делать, поэтому должна быть какая то опция.
А опция может быть на уровне коннекта, но только на уровне коннекта нельзя, потому что есть сохранённый код.
А на уровне сервера нельзя, потому что можно приатачить базу, в которой процедуры написаны по старому.
Тьфу, в общем, не надо :-)
17 дек 17, 19:18    [21040948]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2375
alexeyvg,

да, не надо. тем более всем желающим outer aply предоставили
18 дек 17, 11:04    [21041924]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20203
bideveloper
почему в MSSQL не реализуют такую возможность? Вроде, это не сложно

Потому что реализация такой абы фичи приведёт к появлению неоднозначностей.
SELECT (field+1) as field, field+1 as field2
FROM table

И всё, приплыли...
18 дек 17, 13:51    [21042541]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
StarikNavy
тем более всем желающим outer aply предоставили
outer apply для целей поименования выражений использовать не стоит - лишние накладные расходы по сравнению с cross apply.
18 дек 17, 14:10    [21042635]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
bideveloper
Member

Откуда:
Сообщений: 484
Akina,
На неоднозначности уже есть проверка, например, если выбираем поле, которое называется одинаково в таблицах, по которым идет джойн в запросе. Ее можно расширить с помощью алиаса, как предлагал iii2

iii2
Добавили бы что-то типа алиаса self для обозначения текущего набора полей выборки, и вперед.
18 дек 17, 16:28    [21043201]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20203
bideveloper
На неоднозначности уже есть проверка
Ну и каков будет итог этой проверки? Ambiquous reference? невелика радость...
18 дек 17, 16:31    [21043218]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
к чемуу обсуждать обсурдные идеи? хочет - вперед на connect излагать гениальную мысль
18 дек 17, 16:37    [21043247]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
даже идеи *абсурдные :)
18 дек 17, 16:38    [21043252]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
bideveloper
Member

Откуда:
Сообщений: 484
TaPaK
к чемуу обсуждать обсурдные идеи? хочет - вперед на connect излагать гениальную мысль

уже было )
https://connect.microsoft.com/SQLServer/feedback/details/610120/column-alias-usage-everywhere-in-a-query
18 дек 17, 16:49    [21043288]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
bideveloper,

ну пусть апнет "as Won't Fix" :)
18 дек 17, 16:57    [21043302]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
invm
StarikNavy
тем более всем желающим outer aply предоставили
outer apply для целей поименования выражений использовать не стоит - лишние накладные расходы по сравнению с cross apply.
Вы правда думаете что будет разница между cross apply и outer apply в случае если в подзапросе даже таблицы то и нету?
20 дек 17, 00:33    [21047307]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про использование именованных столбцов  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
Mind
Вы правда думаете что будет разница между cross apply и outer apply в случае если в подзапросе даже таблицы то и нету?
Будет.
set statistics profile on;
go

select top (1)
 a.number, b.number
from
 master.dbo.spt_values a cross apply
 (select a.number * 10) b(number);
/*
select top (1)   a.number, b.number  from   master.dbo.spt_values a cross apply   (select a.number * 10) b(number)
  |--Top(TOP EXPRESSION:((1)))
       |--Compute Scalar(DEFINE:([Expr1004]=[mssqlsystemresource].[sys].[spt_values].[number]*(10)))
            |--Index Scan(OBJECT:([mssqlsystemresource].[sys].[spt_values].[ix2_spt_values_nu_nc]))
*/

select top (1)
 a.number, b.number
from
 master.dbo.spt_values a outer apply
 (select a.number * 10) b(number);
/*
select top (1)   a.number, b.number  from   master.dbo.spt_values a outer apply   (select a.number * 10) b(number)
  |--Top(TOP EXPRESSION:((1)))
       |--Nested Loops(Left Outer Join, OUTER REFERENCES:([mssqlsystemresource].[sys].[spt_values].[number]))
            |--Index Scan(OBJECT:([mssqlsystemresource].[sys].[spt_values].[ix2_spt_values_nu_nc]))
            |--Constant Scan(VALUES:(([mssqlsystemresource].[sys].[spt_values].[number]*(10))))
*/
go

set statistics profile off
go
20 дек 17, 11:27    [21048023]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить