Перевести sybase select в mssql select - PullRequest
0 голосов
/ 14 мая 2018

Мне нужно перевести некоторые sql select с sybase на диалект mssql.Проблемы вызывают у меня простые запросы с псевдонимами.простой пример

select amount * 2 as doubleamount, doubleamount / 4 as half amount from event

Вы видите, что псевдонимы по-прежнему используются.С такими простыми, как здесь, вы можете написать amount * 2 несколько раз.Со сложными запросами вы больше не можете этого делать, особенно если нет процедур и т. Д. У меня есть выборки с десятками псевдонимов-столбцов, которые, как ожидается, будут продолжаться.Могу ли я как-то получить доступ к уже существующему результату и продолжать считать?

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Вы пытались использовать производную таблицу?

Настройка:

drop table if exists event;
create table event(amount money);
insert into event (amount) values (4);

Если вам нужен только один уровень повторного использования, тогда достаточно одной производной таблицы, например:

select doubleamount,
       doubleamount / 4 as [half amount]
from
        (select amount * 2 as doubleamount
         from   event ) dt;

doubleamount | half amount
------------ | -----------
8.0000       | 2.0000   

Вот скрипка из вышеперечисленного.

Если вам нужно сослаться на doubleamount, то вы можете превратить вышеприведенное в его собственную производную таблицу (т. Е. Использовать вложенныепроизводные таблицы).

0 голосов
/ 14 мая 2018

Вы не можете использовать псевдоним в последующем столбце.Вместо этого вам нужно использовать реальную функцию.Кроме того, имена столбцов должны быть заключены в [скобки], если они содержат пробелы или являются зарезервированной работой в SQL Server.

select 
   amount * 2 as doubleamount, 
   (amount * 2) / 4 as [half amount]
from event

Вот более унифицированный метод псевдонимов, который многие считают лучше .Я также изменил пробел на подчеркивание.

select 
   doubleamount = amount * 2, 
   half_amount = (amount * 2) / 4
from event
...