sobre consulta con CASE

01/02/2005 - 17:38 por Carlos | Informe spam
Aver que esto me mata...

tengo esta consulta:

SELECT TOP 100 PERCENT cc.ID_congreso, cc.titulo, ci.ID_inscripcion,
ci.apellido1, ci.apellido2, ci.nombre AS nomb, ci.tipo, cra.forma_pago,
cra.fecha_abono, cra.importe, cra.facturar_tipo,
cde.facturar, cde.facturado,
facturar_a = CASE WHEN (cra.facturar_tipo = 'P') THEN 'Asistente'
WHEN (cra.facturar_tipo = 'E') THEN ce.razon_social_fac END,
direccion = CASE WHEN (cra.facturar_tipo = 'P') THEN ci.direccion_emp
WHEN (cra.facturar_tipo = 'E') THEN ce.direccion_fac END,
CP = CASE WHEN (cra.facturar_tipo = 'P') THEN ci.cp_emp WHEN
(cra.facturar_tipo = 'E') THEN ce.cp_fac END,
localidad = CASE WHEN (cra.facturar_tipo = 'P') THEN ci.localidad_emp
WHEN (cra.facturar_tipo = 'E') THEN ce.localidad_fac END,
provincia = CASE WHEN (cra.facturar_tipo = 'P') THEN ci.provincia_emp
WHEN (cra.facturar_tipo = 'E') THEN ce.provincia_fac END,
telefono = CASE WHEN (cra.facturar_tipo = 'P') THEN ci.telefono_emp WHEN
(cra.facturar_tipo = 'E') THEN ce.telefono_fac END,
fax = CASE WHEN (cra.facturar_tipo = 'P') THEN ci.fax_emp WHEN
(cra.facturar_tipo = 'E') THEN ce.fax_fac END,
NIFCIF = CASE WHEN (cra.facturar_tipo = 'P')THEN ci.nif WHEN
(cra.facturar_tipo = 'E') THEN ce.cif_nif_fac END
FROM dbo.congreso_inscripcion ci INNER JOIN
dbo.congreso_congreso cc ON ci.ID_congreso =
cc.ID_congreso INNER JOIN
dbo.congreso_registro_abono cra ON ci.ID_inscripcion =
cra.ID_inscripcion INNER JOIN
dbo.congreso_detalle_economico cde ON ci.ID_inscripcion =
cde.ID_inscripcion INNER JOIN
dbo.congreso_empresa ce ON ci.ID_inscripcion =
ce.ID_inscripcion
WHERE cde.facturar = 1 AND (cde.facturado = 0 OR
cde.facturado IS NULL)
ORDER BY ci.ID_inscripcion

que funciona OK, ahora quiero añadir otra columna tipo case:
xxx = CASE WHEN (cra.facturar_tipo = 'P')THEN ci.area WHEN
(cra.facturar_tipo = 'E') THEN ce.area_fac END

pues me dice:

Cannot resolve collation conflict for column 22 in SELECT statement.

creaia que se producia si las columnas de tablas tiene mismo nombre pero
en este caso esta bien identificadas...

PORQUE???

Gracias por su lectura...
 

Leer las respuestas

#1 Alejandro Mesa
01/02/2005 - 18:11 | Informe spam
Carlos,

xxx = CASE WHEN (cra.facturar_tipo = 'P')THEN ci.area WHEN
(cra.facturar_tipo = 'E') THEN ce.area_fac END



Las columnas ci.area y ce.area_fac tienen diferente collation, por eso sql
server no sabe cual de las dos cojer para el resultado de a expression case.
Puedes usar la clausula COLLATE para obligar a la expresion a que contenga
un(a) solo(a) collation.

Ejemplo:

declare @t table (
colA varchar(25) COLLATE SQL_Latin1_General_CP1_CS_AS,
colB varchar(25) COLLATE SQL_Latin1_General_CP1_CI_AS
)

insert into @t values ('alejandro', 'mesa')

select
case when 1 = 1 then colA collate SQL_Latin1_General_CP1_CI_AS else colB end
from
@t
go


AMB


"Carlos" wrote:

Aver que esto me mata...

tengo esta consulta:

SELECT TOP 100 PERCENT cc.ID_congreso, cc.titulo, ci.ID_inscripcion,
ci.apellido1, ci.apellido2, ci.nombre AS nomb, ci.tipo, cra.forma_pago,
cra.fecha_abono, cra.importe, cra.facturar_tipo,
cde.facturar, cde.facturado,
facturar_a = CASE WHEN (cra.facturar_tipo = 'P') THEN 'Asistente'
WHEN (cra.facturar_tipo = 'E') THEN ce.razon_social_fac END,
direccion = CASE WHEN (cra.facturar_tipo = 'P') THEN ci.direccion_emp
WHEN (cra.facturar_tipo = 'E') THEN ce.direccion_fac END,
CP = CASE WHEN (cra.facturar_tipo = 'P') THEN ci.cp_emp WHEN
(cra.facturar_tipo = 'E') THEN ce.cp_fac END,
localidad = CASE WHEN (cra.facturar_tipo = 'P') THEN ci.localidad_emp
WHEN (cra.facturar_tipo = 'E') THEN ce.localidad_fac END,
provincia = CASE WHEN (cra.facturar_tipo = 'P') THEN ci.provincia_emp
WHEN (cra.facturar_tipo = 'E') THEN ce.provincia_fac END,
telefono = CASE WHEN (cra.facturar_tipo = 'P') THEN ci.telefono_emp WHEN
(cra.facturar_tipo = 'E') THEN ce.telefono_fac END,
fax = CASE WHEN (cra.facturar_tipo = 'P') THEN ci.fax_emp WHEN
(cra.facturar_tipo = 'E') THEN ce.fax_fac END,
NIFCIF = CASE WHEN (cra.facturar_tipo = 'P')THEN ci.nif WHEN
(cra.facturar_tipo = 'E') THEN ce.cif_nif_fac END
FROM dbo.congreso_inscripcion ci INNER JOIN
dbo.congreso_congreso cc ON ci.ID_congreso =
cc.ID_congreso INNER JOIN
dbo.congreso_registro_abono cra ON ci.ID_inscripcion =
cra.ID_inscripcion INNER JOIN
dbo.congreso_detalle_economico cde ON ci.ID_inscripcion =
cde.ID_inscripcion INNER JOIN
dbo.congreso_empresa ce ON ci.ID_inscripcion =
ce.ID_inscripcion
WHERE cde.facturar = 1 AND (cde.facturado = 0 OR
cde.facturado IS NULL)
ORDER BY ci.ID_inscripcion

que funciona OK, ahora quiero añadir otra columna tipo case:
xxx = CASE WHEN (cra.facturar_tipo = 'P')THEN ci.area WHEN
(cra.facturar_tipo = 'E') THEN ce.area_fac END

pues me dice:

Cannot resolve collation conflict for column 22 in SELECT statement.

creaia que se producia si las columnas de tablas tiene mismo nombre pero
en este caso esta bien identificadas...

PORQUE???

Gracias por su lectura...

Preguntas similares