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?
Vous pouvez utiliser la syntaxe 'CASE .. WHEN .. THEN .. ELSE .. END' dans SQL.
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
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
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
C'est facile à faire:
select
CASE WHEN 10 > 1 THEN 'Yes'
ELSE 'No'
END
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)
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');