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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Rafael Cano
21/01/2010 - 09:41 | Informe spam
¿No será que te sobran las comillas simples que hay en STATUSx en los
campos de selección de la SELECT?

Un saludo Rafael Cano
Jaén - España

El 21/01/2010 1:25, Ricardo_G_L escribió:
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,


Respuesta Responder a este mensaje
#3 Ele
21/01/2010 - 19:17 | Informe spam
"Ricardo_G_L" escribió en el mensaje
news:
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


HOLA
Si solo te interesan los que estan sin visitar (porque solo se mostraran
estos)

entonces cambia la condicion original de los que estan 'SIN VISITAR'

antes-> WHERE sc.ID = C.IDc AND STATUSx = 'SIN VISITAR'

despues-> WHERE sc.ID = C.IDc AND sc.SolVis = 1 AND sc.AnalisisEco = 0

y no esta demas que en el campo calculado 'STATUSx'

reemplaces el case por:

STATUSx = 'SIN VISITAR'

suerte
Respuesta Responder a este mensaje
#4 Miguel Egea
23/01/2010 - 21:35 | Informe spam
No lo puedes usar porque es un alias, te recomiendo que lo cambies del where
por sc.SolVis = 1 AND sc.AnalisisEco = 0 , esto será probablemente lo mejor
desde el punto de vista de rendimiento, ahora bien, si aún sigues queriendo
hacerlo así, puedes usar algo como lo que te escribo aquí

SELECT * FROM ( Toda la select sin ese where ) as Query where Statusx='sin
clasificar'

Saludos.
Miguel Egea
http://www.portalsql.com


"Ricardo_G_L" escribió en el mensaje de
noticias:
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
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida