Access - funcion IF en SQL

 
Vista:
sin imagen de perfil

funcion IF en SQL

Publicado por Julian David (20 intervenciones) el 08/04/2014 17:03:40
Buen día amigos,

requiero de su ayuda para lo siguiente

tengo una consulta llamada Ctagrafica, un formulario llamado Fpresentacion, y en el anterior formulario un botón de opción llamado ChkTop20.

lo que quiero es que al habilitar o des habilitar el botón de opción me genere una consulta en Ctagrafica de un tipo u otra, para ello la consulta en SQL debería quedar algo así:

IF Chktop20 = True then

SELECT TOP 20 [CONSOLIDADO TOTAL].SUBESTACION, Count([CONSOLIDADO TOTAL].SUBESTACION) AS CuentaDeSUBESTACION
FROM [CONSOLIDADO TOTAL]
GROUP BY [CONSOLIDADO TOTAL].SUBESTACION
ORDER BY Count([CONSOLIDADO TOTAL].SUBESTACION) DESC;

else

SELECT [CONSOLIDADO TOTAL].SUBESTACION, Count([CONSOLIDADO TOTAL].SUBESTACION) AS CuentaDeSUBESTACION
FROM [CONSOLIDADO TOTAL]
GROUP BY [CONSOLIDADO TOTAL].SUBESTACION
ORDER BY Count([CONSOLIDADO TOTAL].SUBESTACION) DESC;


lo que no he sabido como platear es la parte de la función IF en este codigo SQL

espero me puedan ayudar, de antemano muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

funcion IF en SQL

Publicado por Neckkito (1157 intervenciones) el 13/04/2014 22:13:57
Hola!

En el evento "Después de actualizar" de tu check prueba este código, a ver si te hace lo que quieres. Te finalizo el código abriendo la consulta para que puedas ver si los resultados son los esperados. Lógicamente podrías cambiar esa parte del código por el que necesites:

....
Private Sub ChkTop20_AfterUpdate()
'Declaramos las variables
Dim miSql As String
Dim miQry As DAO.QueryDef
'Asignamos la consulta a miQry
Set miQry = CurrentDb.QueryDefs("Ctagrafica")
'Comprobamos la acción sobre el check
If Me.ChkTop20.Value = True Then
miSql = "SELECT TOP 20"
Else
miSql = "SELECT"
End If
'Acabamos de construir la consulta
miSql = miSql & " [CONSOLIDADO TOTAL].SUBESTACION, Count([CONSOLIDADO TOTAL].SUBESTACION) AS CuentaDeSUBESTACION" _
& " FROM [CONSOLIDADO TOTAL]" _
& " GROUP BY [CONSOLIDADO TOTAL].SUBESTACION" _
& " ORDER BY Count([CONSOLIDADO TOTAL].SUBESTACION) DESC"
'Asignamos la SQL a la consulta
miQry.SQL = miSql
'Abrimos la consulta
DoCmd.OpenQuery "Ctagrafica"
End Sub
...

A ver si te funciona como quieres.

Saludos,

http://neckkito.siliconproject.com.ar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

funcion IF en SQL

Publicado por Julian David (20 intervenciones) el 15/04/2014 13:59:24
Buen día amigo,

gracias por contestar mi pregunta,

Te comento tu código corre bien pero no ejecuta en verdad lo que deseo, el problema es que tengo varios tipos de gráfica y me gustaría que el código SQL se pudiese ingresar directamente en la consulta

te subo 2 capturas a ver si me puedes ayudar:

CAPTURA 1: consulta en vista de codigo SQL que tengo actualmente
CAPTURA 2: consulta en vista de codigo SQL, aca puedes ver la idea de lo que quiero

es posible esto que te digo

agradezco la atención prestada y perdona las molestias

CAPTURA 1

CAPTURA 2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Neckkito
Val: 529
Plata
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

funcion IF en SQL

Publicado por Neckkito (1157 intervenciones) el 15/04/2014 14:55:48
Hola!

El bloque IF es código VBA, y no puedes meterlo dentro de una consulta. En la consulta sólo puedes introducir la parte de la SQL.

Si quieres hacerlo por consultas deberás combinarlo con código para que te discrimine. Así pues, te deberías crear una consulta con los primeros 20, igual que la primera "CtaGrafica_circuito", y otra con todos, y llamarla, por ejemplo, CtaGrafica_circuitoTodos. Pero ambas sólo con el SQL.

En el código pondrías:

...
If Me.ChkTop20.Value = True Then
docmd.openquery "CtaGrafica_circuito"
Else
docmd.openquery "CtaGrafica_circuitoTodos"
End If
...

Lo que no puedes hacer es lo que estás haciendo: meter VBA dentro de un objeto-consulta.

Saludos,

Neckkito.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar