2009-10-13 63 views
17
SELECT PC_COMP_CODE, 
     'R', 
     PC_RESUB_REF, 
     DECODE(PC_SL_LDGR_CODE, '02', 'DR', 'CR'), 
     PC_DEPT_NO DEPT, 
     '', --PC_DEPT_NO, 
     PC_SL_LDGR_CODE + '/' + PC_SL_ACNO, 
     SUM(DECODE(PC_SL_LDGR_CODE, '02', 1, -1) * PC_AMOUNT), 
     PC_CHEQUE_NO CHQNO 
    FROM GLAS_PDC_CHEQUES 
WHERE PC_RESUB_REF IS NOT NULL 
    AND PC_DISCD NOT IN ('d', 'D', 'T') 
GROUP BY PC_RESUB_REF, 
     PC_COMP_CODE, 
     'JJ', 
     PC_SL_LDGR_CODE + '/' + PC_SL_ACNO, 
     PC_DEPT_NO, 
     PC_CHEQUE_NO, 
     DECODE(PC_SL_LDGR_CODE, '02', 'DR', 'CR') 

上面是一個Oracle查詢;我如何在SQL Server 2005中使用DECODE()函數?SQL Server中的DECODE()函數

+5

您可能想重新格式化SQL一點,並詳細說明具體問題是什麼。 – 2009-10-13 10:00:17

+0

[Oracle Sql Server 2005+中等效的Oracle解碼函數]的可能重複(http://stackoverflow.com/questions/4654084/oracle-decode-function-equivalent-in-sql-server-2005) – BIBD 2013-01-10 17:49:43

回答

38

您可以使用 'CASE。當..然後.. ELSE .. END' 語法在SQL中。

0

你可以CASE。請參閱here

我假設您想將查詢從ORACLE移動到SQL Server?

17

如果我理解正確的問題,你想解碼,但在相當於T-SQL

Select YourFieldAliasName = 
CASE PC_SL_LDGR_CODE 
    WHEN '02' THEN 'DR' 
    ELSE 'CR' 
END 
0

當我使用功能

select dbo.decode(10>1 ,'yes' ,'no') 

然後說語法錯誤附近 '>'

不幸的是,日在沒有得到你周圍有SQL中的CASE子句,因爲你會需要它的邏輯表達式轉換爲位參數相匹配的第一個函數參數類型:

create function decode(@var1 as bit, @var2 as nvarchar(100), @var3 as nvarchar(100)) 
returns nvarchar(100) 
begin 
return case when @var1 = 1 then @var2 else @var3 end; 
end; 

select dbo.decode(case when 10 > 1 then 1 else 0 end, 'Yes', 'No'); 
1

創建SQL函數下面Server和更換DECODEdbo.DECODE

CREATE FUNCTION DECODE(@CondField as nvarchar(100),@Criteria as nvarchar(100), 
         @True Value as nvarchar(100), @FalseValue as nvarchar(100)) 
returns nvarchar(100) 
begin 
     return case when @CondField = @Criteria then @TrueValue 
        else @FalseValue end 
end 
1

這很容易做到:

select 
    CASE WHEN 10 > 1 THEN 'Yes' 
    ELSE 'No' 
END 
0

加入這場 「文字表」,

select 
    t.c.value('@c', 'varchar(30)') code, 
    t.c.value('@v', 'varchar(30)') val 
from (select convert(xml, '<x c="CODE001" v="Value One" /><x c="CODE002" v="Value Two" />') aXmlCol) z 
cross apply aXmlCol.nodes('/x') t(c) 
1

只是爲了完整性(因爲沒有其他人張貼的最明顯的答案):

甲骨文:

DECODE(PC_SL_LDGR_CODE, '02', 'DR', 'CR') 

MSSQL:

IIF(PC_SL_LDGR_CODE='02', 'DR', 'CR') 

壞消息:

有超過4個參數的會導致一個醜陋的IIF級聯