PDA

Ver la Versión Completa : Necesito consulta que modifique resultados. Tipo Case


MartinS
17-08-2012, 14:35:45
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:

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:


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
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
Hola MartinS, prueba de esta forma:


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

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