Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-01-2011
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Select con Case no funciona

Este mi select no estas funcionando. El resultado estas null y no uno(1):

Código Delphi [-]
select
  case id_tecnico
  when null then
    coalesce(max(id_tecnico),0+1)
  end chave
from staff_tecnico
group by id_tecnico

Pero este abajo estas funcionando:


Código Delphi [-]
select coalesce(max(id_tecnico),0+1)chave from staff_tecnico

Porque el primero no funciona? Yo necesito hacer un Select con case, pues puede ser que la tabla, este field puede estar null o no, depende del cliente y necesito hacer una suma en el.
Responder Con Cita
  #2  
Antiguo 04-01-2011
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 19
celades1 Va por buen camino
Hola

El max dentro del case no esta bien creo
debes hacer una select para obtenerlo

No se exactamente lo que pretendes porque parece que haces un group by
y si hay valor nulo que coja el maximo valor del campo con lo que el group by te devolveria dos valores iguales el max y el null que lo convertirias en max
Haces coalesce del max por si es nulo eso corresponderia a que en toda la tabla el campo tiene valor nulo .
Si lo que quieres es poner el nulo a max+1 yo haria

Código SQL [-]
select  case id_tecnico  when null then    coalesce(select max(id_tecnico)+1 from staff_tecnico,1)  end chavefrom staff_tecnicogroup by id_tecnico

No se si te habre ayudado pero lo que si puedes tener claro es que case funciona perfectamente y el error esta en que no lo construyes bien

Saludos
Responder Con Cita
  #3  
Antiguo 04-01-2011
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Asi tambien, no funciona. Me lo da el error en el subquery.
Código SQL [-]
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, column 14.
select.
Responder Con Cita
  #4  
Antiguo 05-01-2011
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Código SQL [-]
select
  case when id_tecnico is null then
    coalesce(max(id_tecnico),0) + 1
  end chave
from staff_tecnico
group by id_tecnico

que tal así??
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #5  
Antiguo 05-01-2011
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Ya lo hizo antes y continua NULL en el resultado. Creo yo que el problema sea el Case.

Código SQL [-]
select
  case when id_tecnico is null then
    coalesce(max(id_tecnico),1)
  end chave
from staff_tecnico
group by id_tecnico
Responder Con Cita
  #6  
Antiguo 05-01-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
¿ Cuando id_tecnico no sea nulo que resultado esperas en tu consulta ?. Puesto que tu case no lo contempla, por lo tanto no va a dar ningún resultado.

En tu consulta solo devuelves un resultado cuando id_tecnico es nulo. Si esto no es lo que realmente quieres, entonces tienes que añadir un else a la construcción case.

NOTA: Por cierto, ¿ esta consulta funciona de verdad ?. Esto de poner un campo en el resultado y una función de agregado sobre ese mismo campo, no lo veo nada claro. Una subconsulta para obtener la función de agregado (max) sería mucho mejor, en mi opinión.

¿ Esto es lo que quieres ?
Código SQL [-]
select
  case when id_tecnico is null then
    (select coalesce(max(id_tecnico),1) from staff_tenico)
  else
    id_tecnico
  end as chave
from staff_tecnico

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
select de media no funciona con ado juangabriel1786 SQL 3 09-03-2009 17:11:51
sintaxis de select case O___o NSL94 Varios 5 22-06-2007 11:24:09
Problema conuna consulta select...not in (select ...) VRO Firebird e Interbase 2 11-08-2005 08:56:35
5 select de 5 tablas diferentes en un select solo sakuragi SQL 6 15-06-2005 18:57:06
Ejemplo Select Case osmar Firebird e Interbase 4 21-02-2005 18:18:57


La franja horaria es GMT +2. Ahora son las 20:07:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi