web-dev-qa-db-fra.com

Fonction DECODE () dans SQL Server

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')

Ci-dessus, une requête Oracle; Comment utiliser la fonction DECODE () dans SQL Server 2005?

28
Domnic

Vous pouvez utiliser la syntaxe 'CASE .. WHEN .. THEN .. ELSE .. END' dans SQL.

49
daxsorbito

Si je comprends bien la question, vous voulez l'équivalent de décoder mais en T-SQL

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

Juste pour être complet (car personne d'autre n'a posté la réponse la plus évidente):

Oracle:

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

MSSQL:

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

Les mauvaises nouvelles:

DECODE avec plus de 4 arguments donnerait une vilaine IIF cascade

14
Daniel Alder

Créez une fonction dans SQL Server comme ci-dessous et remplacez le DECODE par dbo.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
3
Anidesh

C'est facile à faire:

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

rejoindre cette "table littérale",

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
Jacques Bach

quand j'utilise la fonction

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

puis dites une erreur de syntaxe près de '>'

Malheureusement, cela ne vous empêche pas d'avoir la clause CASE dans le code SQL, car vous en auriez besoin pour convertir l'expression logique en un paramètre de bit correspondant au type du premier argument de fonction:

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');
0