ayuda con CASE WHEN END SQL SERVER 2005

21/01/2010 - 01:25 por Ricardo_G_L | Informe spam
Hola:

si alguien me ayuda a corregir este detalle..genere el siguiente script
para MS SQL 2005 SERVER

SELECT c.IDc,
sc.idSol,
c.cApPat + ' ' + c.cApMat + ' ' + c.cNombre AS 'Nombre',
sc.SolFecha AS 'Fecha de Solicitud',
sc.Lugar AS 'LUGAR',
sc.Organismo AS 'ORGANISMO',
r.sRegion AS 'REGION',
sc.EstadoyMunicipio AS 'MUNICIPIO Y ESTADO',
sc.TCredito AS 'Credito Solicitado',
c1.Cultivo AS 'PRODUCTO O SERVICIO',
sc.SolCap AS 'Capturo',
sc.Req11,
sc.SolCapFecha AS 'Fecha de Captura',
Color = CASE
WHEN sc.SolVis = 0 THEN 16711680
WHEN sc.SolVis = 1 AND sc.AnalisisEco = 0 THEN 16711935
WHEN sc.SolVis = 1 AND sc.AnalisisEco = 1 AND
sc.Aprobada =
1 THEN 65280
WHEN sc.SolVis = 1 AND sc.AnalisisEco = 1 AND
sc.Rechazada =
1 THEN 255
END,
'STATUSx' = CASE
WHEN sc.SolVis = 0 THEN 'SIN CALIFICAR'
WHEN sc.SolVis = 1 AND sc.AnalisisEco = 0 THEN 'SIN
VISITAR'
WHEN sc.SolVis = 1 AND sc.AnalisisEco = 1 AND
sc.Aprobada = 1 THEN 'APROBADA'
WHEN sc.SolVis = 1 AND sc.AnalisisEco = 1 AND
sc.Rechazada = 1 THEN 'RECHAZADA'
END,
e2.Estado,
M.Municipio,
l.Localidad
FROM SolCredito sc
INNER JOIN SIACRECO.dbo.Regiones r
ON sc.IdRegion = r.IdRegion
INNER JOIN SIACRECO.dbo.Cultivos c1
ON sc.Req10 = c1.IdCul,
SIACRECO.dbo.Clientes C
INNER JOIN SIACRECO.dbo.Estado e2
ON c.EId = e2.EId
INNER JOIN SIACRECO.dbo.Municipios m
ON e2.EId = m.EId
AND c.MId = m.MId
INNER JOIN SIACRECO.dbo.Localidades l
ON e2.EId = l.EId
AND m.MId = l.MId
AND c.LId = l.LId
WHERE sc.ID = C.IDc AND STATUSx = 'SIN VISITAR'
ORDER BY
e2.Estado,
m.Municipio,
l.Localidad,
r.sRegion,
c1.Cultivo,
sc.idSol

cuando lo ejecuto recibo el error Msg 206, Level 16 Invalid column name
'STATUSx'

eso parece ser en la CLAUSULA WHERE ..

alguien me podria ayudar con esto Gracias,


VBA Developer
 

Leer las respuestas

#1 Alejandro Mesa
21/01/2010 - 02:06 | Informe spam
La sequencia logica en que la sentencia select es procesada es la sgte:

- from
- where
- group by
- having
- select (lista de columnas y expresiones)
- distinct
- top
- order by

Como te habras dado cuenta, no puedes referenciar la expresion 'STATUSx' en
la clausula 'where', pues esta expresion es procesada despues.

Puedes usar la expresion en la clausula 'where', no el alias o nombre que le
distes. Tambien puedes usar una CTE o una tabla derivada.

...
where
CASE
WHEN sc.SolVis = 0 THEN 'SIN CALIFICAR'
WHEN sc.SolVis = 1 AND sc.AnalisisEco = 0 THEN 'SIN VISITAR'
WHEN sc.SolVis = 1 AND sc.AnalisisEco = 1 AND sc.Aprobada = 1 THEN
'APROBADA'
WHEN sc.SolVis = 1 AND sc.AnalisisEco = 1 AND sc.Rechazada = 1 THEN
'RECHAZADA'
END = 'SIN VISITAR';

select *
from (
aqui pones el query sin la clausula 'order by'
)
where STATUSx = 'SIN VISITAR';


AMB


"Ricardo_G_L" wrote:

Hola:

si alguien me ayuda a corregir este detalle..genere el siguiente script
para MS SQL 2005 SERVER

SELECT c.IDc,
sc.idSol,
c.cApPat + ' ' + c.cApMat + ' ' + c.cNombre AS 'Nombre',
sc.SolFecha AS 'Fecha de Solicitud',
sc.Lugar AS 'LUGAR',
sc.Organismo AS 'ORGANISMO',
r.sRegion AS 'REGION',
sc.EstadoyMunicipio AS 'MUNICIPIO Y ESTADO',
sc.TCredito AS 'Credito Solicitado',
c1.Cultivo AS 'PRODUCTO O SERVICIO',
sc.SolCap AS 'Capturo',
sc.Req11,
sc.SolCapFecha AS 'Fecha de Captura',
Color = CASE
WHEN sc.SolVis = 0 THEN 16711680
WHEN sc.SolVis = 1 AND sc.AnalisisEco = 0 THEN 16711935
WHEN sc.SolVis = 1 AND sc.AnalisisEco = 1 AND
sc.Aprobada =
1 THEN 65280
WHEN sc.SolVis = 1 AND sc.AnalisisEco = 1 AND
sc.Rechazada =
1 THEN 255
END,
'STATUSx' = CASE
WHEN sc.SolVis = 0 THEN 'SIN CALIFICAR'
WHEN sc.SolVis = 1 AND sc.AnalisisEco = 0 THEN 'SIN
VISITAR'
WHEN sc.SolVis = 1 AND sc.AnalisisEco = 1 AND
sc.Aprobada = 1 THEN 'APROBADA'
WHEN sc.SolVis = 1 AND sc.AnalisisEco = 1 AND
sc.Rechazada = 1 THEN 'RECHAZADA'
END,
e2.Estado,
M.Municipio,
l.Localidad
FROM SolCredito sc
INNER JOIN SIACRECO.dbo.Regiones r
ON sc.IdRegion = r.IdRegion
INNER JOIN SIACRECO.dbo.Cultivos c1
ON sc.Req10 = c1.IdCul,
SIACRECO.dbo.Clientes C
INNER JOIN SIACRECO.dbo.Estado e2
ON c.EId = e2.EId
INNER JOIN SIACRECO.dbo.Municipios m
ON e2.EId = m.EId
AND c.MId = m.MId
INNER JOIN SIACRECO.dbo.Localidades l
ON e2.EId = l.EId
AND m.MId = l.MId
AND c.LId = l.LId
WHERE sc.ID = C.IDc AND STATUSx = 'SIN VISITAR'
ORDER BY
e2.Estado,
m.Municipio,
l.Localidad,
r.sRegion,
c1.Cultivo,
sc.idSol

cuando lo ejecuto recibo el error Msg 206, Level 16 Invalid column name
'STATUSx'

eso parece ser en la CLAUSULA WHERE ..

alguien me podria ayudar con esto Gracias,


VBA Developer

Preguntas similares