Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Agrupar o no según u parametro de una tabla auxiliar (https://www.clubdelphi.com/foros/showthread.php?t=16910)

apicito 16-12-2004 12:14:03

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?.

Gydba 16-12-2004 15:29:57

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

roman 16-12-2004 19:29:11

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 :confused:

// Saludos

apicito 17-12-2004 12:32:03

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?

apicito 20-12-2004 09:11:42

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.

apicito 27-12-2004 09:53:29

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.

Gydba 27-12-2004 12:55:22

Cita:

Empezado por roman
¿Nooo? Siempre creí que Gydba venía de Data Base Administrator :confused:
// 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!

apicito 27-12-2004 18:29:41

lo que pretendo es hacer un cast a un varchar(80) para convertirlo en Memo(Blob). Tampoco se puede?.

Gydba 27-12-2004 23:44:41

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.


La franja horaria es GMT +2. Ahora son las 04:59:01.

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