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

Откуда: Екатеринбург
Сообщений: 17722
есть

select
       row_number() over( order by t.n_or, t.namep),
       case when row_number() over(partition by t.n_or order by t.namep)=1 then t.n_or else null end as no
        ,namep,dp,df
    from tt t


надо сделать нечто такое

select
       row_number() over( order by t.n_or, t.namep) as ccc ,
       case when row_number() over(partition by t.n_or order by t.namep)=1 then t.n_or else null end as no,
if ccc=1 ляляляляля,
if ccc=2 usususus,
        ,namep,dp,df
    from tt t
18 ноя 09, 09:10    [7942967]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31182
вадя
надо сделать нечто такое
подзапрос
18 ноя 09, 09:17    [7943010]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
;
with q(ccc, no, namer, dp, df)
as
(
select
       row_number() over( order by t.n_or, t.namep),
       case when row_number() over(partition by t.n_or order by t.namep)=1 then t.n_or else null end as no
        ,namep,dp,df
    from tt t
)

select
        q.ccc
        ,q.no
        ,case when q.ccc=1 then ляляляляля end
    from
        q q
--------------------------------------------------------------
Дьявол кроется в деталях.
18 ноя 09, 09:23    [7943047]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17722
покажи
18 ноя 09, 09:24    [7943049]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
То есть в некоторых строках результата запроса должно быть 3 поля, а в некоторых - 6 полей?
В реляционных базах это невозможно. В них оперируют только плоскими двумерными таблицами.
Вам нужен другой сервер вместо MS SQL
18 ноя 09, 09:26    [7943057]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iap
То есть в некоторых строках результата запроса должно быть 3 поля, а в некоторых - 6 полей?
В реляционных базах это невозможно. В них оперируют только плоскими двумерными таблицами.
Вам нужен другой сервер вместо MS SQL
Хотя, может, я неправильно понимаю, что имеется в виду под словом "if"? Там ведь оно вообще невозможно (читать документацию).
18 ноя 09, 09:29    [7943075]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
qwrqwr
Member

Откуда: Msk
Сообщений: 1684
вадя, если имеется в виду возможно ли обратиться в списке полей селекта к алиасу другого поля этого же списка (как можно, например, в Акцесс) - то в MSSQL так нельзя (и это правильно).
Выход - повторить вычисляемое выражение многократно (сервер все равно вычислит его один раз) - или (для читабельности) оборачивать в подзапрос / СТЕ как уже показали.
18 ноя 09, 09:32    [7943101]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17722
2Дедушка
этот вариант я знаю.
есть желание всё в одном селекте проворачивать...


точнее будет
...., if ccc=1 ляляляляля else ccccccxcxcxcxc ,....

по документации - невозможно, поэтому в вопросе надо сделать нечто такое
18 ноя 09, 09:33    [7943104]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
вадя
есть желание всё в одном селекте проворачивать...

select
       row_number() over( order by t.n_or, t.namep) as ccc ,
       case when row_number() over(partition by t.n_or order by t.namep)=1 then t.n_or else null end as no,
       case when row_number() over( order by t.n_or, t.namep)=1 then ляляляляля else тутуту end,
       ,namep,dp,df
    from tt t
18 ноя 09, 09:37    [7943139]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
вадя
точнее будет
...., if ccc=1 ляляляляля else ccccccxcxcxcxc ,....

по документации - невозможно, поэтому в вопросе надо сделать нечто такое
Так Вы, оказывается, документацию читали?
Значит, просто прикалываетесь, когда пишете IF в SELECTе?
18 ноя 09, 09:44    [7943177]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17722
2Дедушка
и этот вариант я знаю (выходит я знаю всё???, жаль....)

смущает повторение
row_number() over( order by t.n_or, t.namep)

я не уверен, что это будет вычисляться один раз
18 ноя 09, 09:45    [7943183]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17722
2iap
я ж и говорю - нечто подобное

иначе я б спрашивал - почему не работает if...
18 ноя 09, 09:48    [7943194]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> 2Дедушка
> этот вариант я знаю.
> есть желание всё в одном селекте проворачивать...

а это и есть один селект. чем конкретно этот вариант не устраивает, кроме "есть желание"?

Posted via ActualForum NNTP Server 1.4

18 ноя 09, 09:49    [7943204]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
вадя
смущает повторение
row_number() over( order by t.n_or, t.namep)

я не уверен, что это будет вычисляться один раз

а план посмотреть?
вводя ограничение вы себя ограничиваете (как бы это не звучало) :)
18 ноя 09, 09:51    [7943223]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17722
у меня tt уже подзапрос......
with к подзапросу

Сообщение 208, уровень 16, состояние 1, строка 27
Недопустимое имя объекта "tt".
18 ноя 09, 10:03    [7943302]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> у меня tt уже подзапрос......
> with к подзапросу
>
> Сообщение 208, уровень 16, состояние 1, строка 27
> Недопустимое имя объекта "tt".

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

Posted via ActualForum NNTP Server 1.4

18 ноя 09, 10:05    [7943317]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17722
последний Дедушкин вариант проканывает, по плану выполнения всё одинаково
что с
case when row_number() over( order by t.n_or, t.namep)=1 then ляляляляля else тутуту end,
что без.
а по затратам трудно судить - вего 10 записей
18 ноя 09, 10:30    [7943451]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Превратите каждую из 10 в миллион и протестируйте, в чем проблема?

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум..
18 ноя 09, 12:01    [7944113]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17722
DENIS_CHEL
Превратите каждую из 10 в миллион и протестируйте, в чем проблема?

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум..



лень .....
там слишком хитро завязано несколько таблиц
18 ноя 09, 13:41    [7944919]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
iljy
Member

Откуда:
Сообщений: 8711
вадя
DENIS_CHEL
Превратите каждую из 10 в миллион и протестируйте, в чем проблема?

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум..



лень .....
там слишком хитро завязано несколько таблиц



? и что?

select t1.* from
(select .... -- хитрый-перхитрый запрос) t1 cross join
(select top 1000000 1 x from master..spt_values t1, mastre..spt_values t2) t2
18 ноя 09, 13:49    [7944981]     Ответить | Цитировать Сообщить модератору
 Re: Несколько полей по одному вычисляемому полю  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17722
спасибо.
но помимо лени, пораскинул мозгами и пришёл к выводу
как бы не был плох тот вариант, что выбран, пока лучшего нет
18 ноя 09, 14:58    [7945568]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить