SQL Server中的DECODE()函数

Dom*_*nic 28 sql sql-server oracle sql-server-2005

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')
Run Code Online (Sandbox Code Playgroud)

以上是Oracle查询; 如何在SQL Server 2005中使用DECODE()函数?

dax*_*ito 50

您可以在SQL中使用'CASE .. WHEN .. THEN .. ELSE .. END'语法.


And*_*rew 26

如果我正确理解了这个问题,你需要相当于解码但在T-SQL中

Select YourFieldAliasName =
CASE PC_SL_LDGR_CODE
    WHEN '02' THEN 'DR'
    ELSE 'CR'
END
Run Code Online (Sandbox Code Playgroud)


Dan*_*der 14

只是为了完整性(因为没有其他人发布最明显的答案):

甲骨文:

DECODE(PC_SL_LDGR_CODE, '02', 'DR', 'CR')
Run Code Online (Sandbox Code Playgroud)

MSSQL:

IIF(PC_SL_LDGR_CODE='02', 'DR', 'CR')
Run Code Online (Sandbox Code Playgroud)

坏消息:

DECODE超过4个参数将导致丑陋的IIF级联