2014-11-13 3 views
0

Привет всем У меня есть запрос в оракула следующимOracle Convertion в SQL для DECODE

DECLARE in_variable Varchar; 
Select Row_Number() 
OVER 
(
    Order By 
    Decode(in_variable,'column_name ASC',t.column_name) Asc) b 
    From table t 

преобразованных к SQL серверу следующим образом

DECLARE @in_variable NVARCHAR(100) 
SELECT ROW_NUMBER() OVER 
       (
        ORDER BY 
        IIF (@in_sort_by <> '', 'column_name ASC', t.column_name) ASC) 
        FROM    table t 

Является ли это правильным или я не так делаю, когда я дайте значение для @in_variable Я получаю исключение для конверсии в sql, так что может кто-то мне помочь

+0

«SQL» относится к стандарту, реализуемому большинством реляционных баз данных. «SQL Server» - это реляционная база данных Microsoft. – Allan

+0

Как насчет подтверждения или подтверждения результатов самостоятельно? Это сэкономит вам время, а также другие. –

ответ

1

Вместо того, чтобы использовать DECODE или IIF, d лучше использовать CASE. Для SQL Server, это было бы:

SELECT ROW_NUMBER() OVER 
       ( ORDER BY 
        CASE WHEN @in_sort_by <> '' 
         THEN 'column_name ASC' 
         ELSE t.column_name END ASC) 
FROM table t 

Если вы получаете сообщение об ошибке преобразования типа, что будет означать, что t.column_name является int. SQL Server попытается преобразовать старую строку 'column_name ASC' в соответствие типу данных столбца, который он используется вместо. Чтобы исправить это, вы можете попробовать использовать CAST чтобы преобразовать столбец в VARCHAR:

SELECT ROW_NUMBER() OVER 
       ( ORDER BY 
        CASE WHEN @in_sort_by <> '' 
         THEN 'column_name ASC' 
         ELSE CAST(t.column_name as varchar) END ASC) 
FROM table t 

Однако, я думаю, вы, вероятно, преследует неправильное решение здесь. Похоже, вы пытаетесь сделать выбор аналитической функции по-разному на основе предоставленной переменной. Предоставление альтернативного имени столбца и порядка сортировки в виде строки не собирается этого делать. Вероятно, вы должны посмотреть вопросы, связанные с dynamic sorting, как это сделать правильно.

+0

, но это приводит к ошибке преобразования. Ошибка конверсии при преобразовании значения varchar 'column_name ASC' в тип данных int. ' – Dotnet

+0

Спасибо Аллан Я сделал это с' IIF' вместо 'CASE' – Dotnet

 Смежные вопросы

  • Нет связанных вопросов^_^