Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-12-2004
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 21
apicito Va por buen camino
Agrupar o no según u parametro de una tabla auxiliar

Utilizo Firebire 1.0 con Ibo sobre Delphi 7.
Tengo una tabla principal (Articulos) que tiene un campo (Art_Grupo) que es un codigo que enlaza con una tabla auxiliar de grupos y que indica a que grupo pertenece el artículo. En la tabla auxiliar existe un campo booleano que indica si los artículos de ese grupo se desglosan o no.
Lo que busco es una sql que liste los articulos de forma que si el grupo a que pertenece el artículo tiene el campo de desglose a true aparezca la descripción del artículo, pero los artículos que pertenecen a un grupo con campo de desglose a false los agrupe indicando el nombre del grupo (una sola vez, claro).
Será posible hacerlo mediante una orden sql?.
Responder Con Cita
  #2  
Antiguo 16-12-2004
Gydba Gydba is offline
Miembro
 
Registrado: ene 2004
Ubicación: Argentina
Posts: 673
Poder: 21
Gydba Va por buen camino
Hola,

No sé cuanto entendí del enunciado, y a pesar de que el SQL no va del todo conmigo esto es lo que se me ocurrió:
Código SQL [-]
SELECT
    ART.ID_GRUPO, GRP.NOMBRE, ART.NOMBRE, GRP.DESGLOSA
FROM ARTICULOS ART
    JOIN ART_GRUPO GRP ON GRP.ID = ART.ID_GRUPO
WHERE GRP.DESGLOSA = 1
UNION
SELECT
    ART.ID_GRUPO, GRP.NOMBRE, CAST('' AS VARCHAR(30)), GRP.DESGLOSA
FROM ARTICULOS ART
    JOIN ART_GRUPO GRP ON GRP.ID = ART.ID_GRUPO
WHERE GRP.DESGLOSA = 0
GROUP BY
    ART.ID_GRUPO, GRP.NOMBRE, GRP.DESGLOSA
__________________
Suerte
.: Gydba :.
Responder Con Cita
  #3  
Antiguo 16-12-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Gydba
y a pesar de que el SQL no va del todo conmigo
¿Nooo? Siempre creí que Gydba venía de Data Base Administrator

// Saludos
Responder Con Cita
  #4  
Antiguo 17-12-2004
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 21
apicito Va por buen camino
Gracias Gydba por tu respuesta.
He probado a utilizarla y no consigo que me funcione. En realidad, el problema que plantee era una abstacción del siguiente:
Donde dije articulos en realidad son asuntos a tratar en una reunión (SESASU_ASUNTO) de tipo Blob, el nombre de los grupos es SESGRU_DESCRIP y es de tipo varchar(80) y el campo de desglose SESGRU_MOSTRAR es boolean. Se trata de listar los asuntos a tratar en la reunión de forma que si en el grupo al que pertenece cada asunto SESGRU_MOSTRAR=1 muestra el titulo del asunto y si es SESGRU_MOSTRAR=0 muestra el nombre del grupo sin repetir nombres de grupo.
He probado con:
Código:
select A.SESASU_SESION,A.SESASU_GRUPO,A.SESASU_ORDEN,
A.SESASU_ASUNTO as ASUNTO,
G.SESGRU_CODIGO,G.SESGRU_MOSTRAR
from SESPLEASU A 
join SESPLEGRU G on G.SESGRU_CODIGO=A.SESASU_GRUPO
where G.SESGRU_MOSTRAR=1
union
select A.SESASU_SESION,A.SESASU_GRUPO,A.SESASU_ORDEN,
G.SESGRU_DESCRIP as ASUNTO,
G.SESGRU_CODIGO,G.SESGRU_MOSTRAR
from SESPLEASU A 
join SESPLEGRU G on G.SESGRU_CODIGO=A.SESASU_GRUPO
where G.SESGRU_MOSTRAR=1
group by A.SESASU_GRUPO
order by A.SESASU_GRUPO,A.SESASU_ORDEN
pero me da un error
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
si le hago un cast(G.SESGRU_DESCRIP as blob) as ASUNTO,
me da el mismo error.
Que es lo que está mal?
Responder Con Cita
  #5  
Antiguo 20-12-2004
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 21
apicito Va por buen camino
Se puede hacer esto?
Código:
A.SESASU_ASUNTO as ASUNTO,
y
Código:
G.SESGRU_DESCRIP as ASUNTO,
Donde SESASU_ASUNTO es un blob de texto y SESGRU_DESCRIP un string.
Responder Con Cita
  #6  
Antiguo 27-12-2004
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 21
apicito Va por buen camino
Nadie me puede ayudar con este SQL?. No se como hacer que aparezcan en la misma columna un dato de tipo memo u otro de tipo string dependiendo del valor de un tercer campo.
Responder Con Cita
  #7  
Antiguo 27-12-2004
Gydba Gydba is offline
Miembro
 
Registrado: ene 2004
Ubicación: Argentina
Posts: 673
Poder: 21
Gydba Va por buen camino
Cita:
Empezado por roman
¿Nooo? Siempre creí que Gydba venía de Data Base Administrator
// Saludos
Je je... bastante cerca
Pero es verdad, a pesar que en una época me emocionaba bastante todo lo de DB se me fue pasando cuando me metí más en Linux.

Cita:
Empezado por apicito
Donde SESASU_ASUNTO es un blob de texto y SESGRU_DESCRIP un string.
Me parece que no se puede hacerle un cast a un campo BLOB, pero como no tengo FB para comprobarlo... Lo que podrías hacer es utilizar una UDF que permita hacerlo. Fijate si con ésta te funciona:
http://ibase.ru/download/freeudflib.zip
http://ibase.ru/download/freeudflibc-0_6_tar.gz
También no vendría mal una ojeada a:
http://www.clubdelphi.com/columnas/8/8.php

Saludos!
__________________
Suerte
.: Gydba :.
Responder Con Cita
  #8  
Antiguo 27-12-2004
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 21
apicito Va por buen camino
lo que pretendo es hacer un cast a un varchar(80) para convertirlo en Memo(Blob). Tampoco se puede?.
Responder Con Cita
  #9  
Antiguo 27-12-2004
Gydba Gydba is offline
Miembro
 
Registrado: ene 2004
Ubicación: Argentina
Posts: 673
Poder: 21
Gydba Va por buen camino
Hola,

Hasta donde yo sé no es posible sin el uso de alguna UDF. Yo me quedé con la versión 1.5.0 de FB por lo cuál desconozco si alguna nueva versión posibilita esto.
__________________
Suerte
.: Gydba :.
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 10:05:47.


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