Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Necesito consulta que modifique resultados. Tipo Case (https://www.clubdelphi.com/foros/showthread.php?t=79866)

MartinS 17-08-2012 14:35:45

Necesito consulta que modifique resultados. Tipo Case
 
Hola: Bueno, muy bien no sabia que titulo poner asi que pido disculpas a quien ingresara pensando que era otra cosa :D
El tema es el siguiente: hago una consulta que relaciona cuatro tablas mediante inner join, que si bien funciona, desearía que me mostrara un determinado campo (Situacion) de otra forma ya que estos se exportan a excel y requiere otro tipo de "nomenclatura".

La consulta es esta:

Código Delphi [-]
       With Dm.VerTrabajos do
       Begin
           Close;
           Sql.Clear;
           Sql.Add('Select Internos.Id,Apellidos,Nombres,Situacion, Trabajadores.*,');
           Sql.Add('Sectores.*,Rubros.* From Internos ');
           Sql.Add('Inner Join Trabajadores on Trabajadores.IdInt = Internos.Id');
           Sql.Add('Inner Join Sectores on Trabajadores.IdSector = Sectores.Id');
           Sql.Add('Inner Join Rubros on Trabajadores.IdRubro = Rubros.Id');
           Sql.Add('Where Trabajadores.Activo = '+QuotedStr('Si')+' and Sectores.NomSector = :Nombre');
           SQL.Add('Order by Sectores.NomSector');
           ParamByName('Nombre').AsString := CSector.Items.Strings[CSector.ItemIndex];
           Open;
       end;

donde el campo Situacion de la tabla internos originalmente guarda procesado, penado o detenido y necesitaria que me devuelva 0,1 o 2.
¿Como se hace?. ¿Me podrian ayudar? :o
Gracias
Saludos.-

Caro 17-08-2012 15:42:12

Hola MartinS, prueba de esta forma:

Código SQL [-]
Select Internos.Id,....., Case Situacion When 'procesado' then 0
                                         When 'penado' then 1
                                         When 'detenido' then 2 end, Trabajadores.*,
........................................
From Internos
.....................................................
....................................................

Saluditos

Cañones 17-08-2012 15:46:50

Hola MartinS, yo lo que haría es al dataset Sql agregarle un campo calculado cuando la situación es procesado tome el valor cero y así para los otros campos.
Creo que es lo mejor, trasladar esa lógica al cliente, porque de otra manera sería hacer tres union en el sql pero no me gusta mucho.
Saludos.

Casimiro Notevi 17-08-2012 16:00:08

La solución es la que ha puesto Caro :)

Cañones 17-08-2012 16:10:10

Cita:

Empezado por Casimiro Notevi (Mensaje 439819)
La solución es la que ha puesto Caro :)

Todavía no lo probé pero está muy bueno. Yo lo hacia con tres union o con campos calculados.
Todos los días se aprende algo acá.
Gracias.

MartinS 17-08-2012 16:14:15

Cita:

Empezado por Caro (Mensaje 439817)
Hola MartinS, prueba de esta forma:

Código SQL [-]
Select Internos.Id,....., Case Situacion When 'procesado' then 0
                                         When 'penado' then 1
                                         When 'detenido' then 2 end, Trabajadores.*,
........................................
From Internos
.....................................................
....................................................

Saluditos

Gracias Caro. Precisamente eso era lo que buscaba. ^\||/ . En un momento te iba a preguntar ya que no me arrojaba ningún dato entonces puse un dbgrid en crudo y ahí me percate que me había cambiado el nombre de campo a CASE.

Gracias nuevamente.-

Cita:

Empezado por Cañones (Mensaje 439818)
Hola MartinS, yo lo que haría es al dataset Sql agregarle un campo calculado cuando la situación es procesado tome el valor cero y así para los otros campos.
Creo que es lo mejor, trasladar esa lógica al cliente, porque de otra manera sería hacer tres union en el sql pero no me gusta mucho.
Saludos.

Gracias Cañones. El hecho es que uso ese query para diferentes consultas de modo que no puedo agregar campos con el editor (Boton derecho arriba del IbQuery). Mucho menos lo agregaria por código pues no sé como se hace :D:D
Gracias igualmente por la respuesta.-

MartinS 17-08-2012 16:16:23

Cita:

Empezado por Cañones (Mensaje 439820)
Todavía no lo probé pero está muy bueno. Yo lo hacia con tres union o con campos calculados.
Todos los días se aprende algo acá.
Gracias.

Por las uniones una vez de desaprobo mi profe de matematica aplicada por lo que pienso no usarlo jamas !!! :D:D.

Gracias y saludos


La franja horaria es GMT +2. Ahora son las 18:31:59.

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