Condicianales en sentencia SQL

21/03/2007 - 10:19 por José Luis Capel - Aicom | Informe spam
Hola a todos,

Esta cuestión es, como es habitual en mi, de novato.

Sea la siguiente tabla:

codigo ndia1 ndia2 ndia3
'0021' 0 0 1
'0032' 2 0 0
'0031' 0 3 0
'0082' 1 0 0

donde ndia1, ndia2, y ndia3 son campos tipo int.

En un select me gustaría obtener estos resultados

codigo dia
'0021' '3'
'0032' '1'
'0031' '2'
'0082' '1'

El select sería algo así

SELECT codigo, (IF ndia1 <> 0 then '1' else IF ndia2 <> 0 then '2' else IF
ndia3 <> 0 then '3' else '0' end ) AS dia FROM mitabla

Obviamente esa sintaxis no es correcta :-(

¿Alguien me puede echar una mano?

Saludos y gracias,
José Luis Capel

Preguntas similare

Leer las respuestas

#1 Rubén Vigón
21/03/2007 - 10:45 | Informe spam
Hola José Luis,

Sólo tienes que usar «CASE»; prueba lo siguiente:

SELECT codigo, CASE WHEN ndia1 != 0 THEN 1 ELSE CASE WHEN ndia2 != 0 THEN 2 ELSE CASE WHEN ndia3 != 0 THEN 3 ELSE NULL END END END AS dia FROM TuTabla
_________________________

codigo dia
0021 3
0032 1
0031 2
0082 1

(4 filas afectadas)
_________________________

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic
http://vigon.mvps.org
Respuesta Responder a este mensaje
#2 Alejandro Mesa
21/03/2007 - 14:50 | Informe spam
José Luis Capel,

Muy buena la solución de Rubén. Lo que se esta haciendo es "unpivoting"
(alguien que me ayude con esta palabra en Español) las columnas y las
transforma en filas. Veamos como hacerlo con el nuevo operador UNPIVOT en SQL
Server 2005.

use northwind
go

create table dbo.t1 (
codigo char(4) not null,
ndia1 int not null,
ndia2 int not null,
ndia3 int not null
)
go

insert into dbo.t1 values('0021', 0, 0, 1)
insert into dbo.t1 values('0032', 2, 0, 0)
insert into dbo.t1 values('0031', 0, 3, 0)
insert into dbo.t1 values('0082', 1, 0, 0)
go

select
codigo, ndia
from
(
select
codigo,
ndia1 as [1],
ndia2 as [2],
ndia3 as [3]
from
dbo.t1
) p
unpivot
([value] for ndia in ([1], [2], [3])) as unpvt
where
value > 0
go

drop table dbo.t1
go


AMB


"José Luis Capel - Aicom" wrote:

Hola a todos,

Esta cuestión es, como es habitual en mi, de novato.

Sea la siguiente tabla:

codigo ndia1 ndia2 ndia3
'0021' 0 0 1
'0032' 2 0 0
'0031' 0 3 0
'0082' 1 0 0

donde ndia1, ndia2, y ndia3 son campos tipo int.

En un select me gustaría obtener estos resultados

codigo dia
'0021' '3'
'0032' '1'
'0031' '2'
'0082' '1'

El select sería algo así

SELECT codigo, (IF ndia1 <> 0 then '1' else IF ndia2 <> 0 then '2' else IF
ndia3 <> 0 then '3' else '0' end ) AS dia FROM mitabla

Obviamente esa sintaxis no es correcta :-(

¿Alguien me puede echar una mano?

Saludos y gracias,
José Luis Capel




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida