Autor Tema: Consulta SQL con Valor 0  (Leído 3063 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Luffy

  • Kilobyte
  • **
  • Mensajes: 90
  • Reputación: +4/-2
  • Desarrollar es el arte de crecer no de crear.
    • Ver Perfil
Consulta SQL con Valor 0
« en: Septiembre 17, 2014, 11:35:55 am »
muy buenos días, tengo una consulta en SQL que es básicamente esta (La pongo con el código para que me digan si está bien):

Código: (vb) [Seleccionar]
Dim txtConsultaPrimera As New StringBuilder
                txtConsultaPrimera.Append("(Select Count(Tipo_Asistencia) As Normal ")
                txtConsultaPrimera.Append("From Asistencia")
                txtConsultaPrimera.Append(" Where ")
                txtConsultaPrimera.Append("Id_Empresa = ").Append(My.Settings.Empresa.ToString).Append(" And ")
                txtConsultaPrimera.Append("Contato = ").Append(TablaContratos.Rows(n).Item("Codigo").ToString).Append(" And ")
                txtConsultaPrimera.Append("Planilla = 1").Append(" And ")
                txtConsultaPrimera.Append("Tipo_Asistencia = 'NORMAL'").Append(" And ")
                txtConsultaPrimera.Append("Fecha BETWEEN '").Append(DeFecha(Fecha0101)).Append("' And '").Append(DeFecha(Fecha0102)).Append("') ")
                txtConsultaPrimera.Append("As Primera")

                Dim txtConsultaPrimeraMonto As New StringBuilder
                txtConsultaPrimeraMonto.Append("(Select Sum(Monto_Ord) As Monto ")
                txtConsultaPrimeraMonto.Append("From Asistencia")
                txtConsultaPrimeraMonto.Append(" Where ")
                txtConsultaPrimeraMonto.Append("Id_Empresa = ").Append(My.Settings.Empresa.ToString).Append(" And ")
                txtConsultaPrimeraMonto.Append("Contato = ").Append(TablaContratos.Rows(n).Item("Codigo").ToString).Append(" And ")
                txtConsultaPrimeraMonto.Append("Planilla = 1").Append(" And ")
                txtConsultaPrimeraMonto.Append("Tipo_Asistencia = 'NORMAL'").Append(" And ")
                txtConsultaPrimeraMonto.Append("Fecha BETWEEN '").Append(DeFecha(Fecha0101)).Append("' And '").Append(DeFecha(Fecha0102)).Append("') ")
                txtConsultaPrimeraMonto.Append("As Monto_Ord_1")

                Dim txtConsultaSegunda As New StringBuilder
                txtConsultaSegunda.Append("(Select Count(Tipo_Asistencia) As Normal ")
                txtConsultaSegunda.Append("From Asistencia")
                txtConsultaSegunda.Append(" Where ")
                txtConsultaSegunda.Append("Id_Empresa = ").Append(My.Settings.Empresa.ToString).Append(" And ")
                txtConsultaSegunda.Append("Contato = ").Append(TablaContratos.Rows(n).Item("Codigo").ToString).Append(" And ")
                txtConsultaSegunda.Append("Planilla = 1").Append(" And ")
                txtConsultaSegunda.Append("Tipo_Asistencia = 'NORMAL'").Append(" And ")
                txtConsultaSegunda.Append("Fecha BETWEEN '").Append(DeFecha(Fecha0201)).Append("' And '").Append(DeFecha(Fecha0202)).Append("') ")
                txtConsultaSegunda.Append("As Segunda")

                Dim txtConsultaSegundaMonto As New StringBuilder
                txtConsultaSegundaMonto.Append("(Select Sum(Monto_Ord) As Monto ")
                txtConsultaSegundaMonto.Append("From Asistencia")
                txtConsultaSegundaMonto.Append(" Where ")
                txtConsultaSegundaMonto.Append("Id_Empresa = ").Append(My.Settings.Empresa.ToString).Append(" And ")
                txtConsultaSegundaMonto.Append("Contato = ").Append(TablaContratos.Rows(n).Item("Codigo").ToString).Append(" And ")
                txtConsultaSegundaMonto.Append("Planilla = 1").Append(" And ")
                txtConsultaSegundaMonto.Append("Tipo_Asistencia = 'NORMAL'").Append(" And ")
                txtConsultaSegundaMonto.Append("Fecha BETWEEN '").Append(DeFecha(Fecha0201)).Append("' And '").Append(DeFecha(Fecha0202)).Append("') ")
                txtConsultaSegundaMonto.Append("As Monto_Ord_2")

                Dim txtConsultaSeptimo As New StringBuilder
                txtConsultaSeptimo.Append("(Select Count(Tipo_Asistencia) As Normal ")
                txtConsultaSeptimo.Append("From Asistencia")
                txtConsultaSeptimo.Append(" Where ")
                txtConsultaSeptimo.Append("Id_Empresa = ").Append(My.Settings.Empresa.ToString).Append(" And ")
                txtConsultaSeptimo.Append("Contato = ").Append(TablaContratos.Rows(n).Item("Codigo").ToString).Append(" And ")
                txtConsultaSeptimo.Append("Planilla = 1").Append(" And ")
                txtConsultaSeptimo.Append("Tipo_Asistencia = 'SEPTIMO')").Append(" As Septimos")

                Dim txtConsultaSeptimoMonto As New StringBuilder
                txtConsultaSeptimoMonto.Append("(Select Sum(Monto_Ord) As Normal ")
                txtConsultaSeptimoMonto.Append("From Asistencia")
                txtConsultaSeptimoMonto.Append(" Where ")
                txtConsultaSeptimoMonto.Append("Id_Empresa = ").Append(My.Settings.Empresa.ToString).Append(" And ")
                txtConsultaSeptimoMonto.Append("Contato = ").Append(TablaContratos.Rows(n).Item("Codigo").ToString).Append(" And ")
                txtConsultaSeptimoMonto.Append("Planilla = 1").Append(" And ")
                txtConsultaSeptimoMonto.Append("Tipo_Asistencia = 'SEPTIMO')").Append(" As Monto_Sep")

                Dim txtConsultaAsuetos As New StringBuilder
                txtConsultaAsuetos.Append("(Select Count(Tipo_Asistencia) As Normal ")
                txtConsultaAsuetos.Append("From Asistencia")
                txtConsultaAsuetos.Append(" Where ")
                txtConsultaAsuetos.Append("Id_Empresa = ").Append(My.Settings.Empresa.ToString).Append(" And ")
                txtConsultaAsuetos.Append("Contato = ").Append(TablaContratos.Rows(n).Item("Codigo").ToString).Append(" And ")
                txtConsultaAsuetos.Append("Planilla = 1").Append(" And ")
                txtConsultaAsuetos.Append("Tipo_Asistencia = 'ASUETO')").Append(" As Asuetos")

                Dim txtConsultaAsuetosMonto As New StringBuilder
                txtConsultaAsuetosMonto.Append("(Select Sum(Tipo_Asistencia) As Normal ")
                txtConsultaAsuetosMonto.Append("From Asistencia")
                txtConsultaAsuetosMonto.Append(" Where ")
                txtConsultaAsuetosMonto.Append("Id_Empresa = ").Append(My.Settings.Empresa.ToString).Append(" And ")
                txtConsultaAsuetosMonto.Append("Contato = ").Append(TablaContratos.Rows(n).Item("Codigo").ToString).Append(" And ")
                txtConsultaAsuetosMonto.Append("Planilla = 1").Append(" And ")
                txtConsultaAsuetosMonto.Append("Tipo_Asistencia = 'ASUETO')").Append(" As Monto_Asu")

                Dim txtConsultaAsistencia As New StringBuilder
                txtConsultaAsistencia.Append("Select Id_Empresa")
                txtConsultaAsistencia.Append(", ").Append("Contato As Contrato")
                txtConsultaAsistencia.Append(", ").Append("Cui")
                txtConsultaAsistencia.Append(", ").Append("Empleado")
                txtConsultaAsistencia.Append(", ").Append(txtConsultaPrimera.ToString)
                txtConsultaAsistencia.Append(", ").Append(txtConsultaPrimeraMonto.ToString)
                txtConsultaAsistencia.Append(", ").Append(txtConsultaSegunda.ToString)
                txtConsultaAsistencia.Append(", ").Append(txtConsultaSegundaMonto.ToString)
                txtConsultaAsistencia.Append(", ").Append(txtConsultaSeptimo.ToString)
                txtConsultaAsistencia.Append(", ").Append(txtConsultaSeptimoMonto.ToString)
                txtConsultaAsistencia.Append(", ").Append(txtConsultaAsuetos.ToString)
                txtConsultaAsistencia.Append(", ").Append(txtConsultaAsuetosMonto.ToString)
                txtConsultaAsistencia.Append(", ").Append("SUM(Horas_Ord) AS Horas_Ord")
                txtConsultaAsistencia.Append(", ").Append("SUM(Horas_Ext) AS Horas_Ext")
                txtConsultaAsistencia.Append(", ").Append("SUM(Horas_Total) AS Horas_Total")
                txtConsultaAsistencia.Append(", ").Append("SUM(Monto_Ord) AS Monto_Ord")
                txtConsultaAsistencia.Append(", ").Append("SUM(Monto_Ext) AS Monto_Ext")
                txtConsultaAsistencia.Append(", ").Append("SUM(Monto_Decreto) AS Monto_Decreto")
                txtConsultaAsistencia.Append(", ").Append("SUM(Monto_Incentivo) AS Monto_Incentivo")
                txtConsultaAsistencia.Append(", ").Append("SUM(Monto_Total) AS Monto_Total")
                txtConsultaAsistencia.Append(" ")
                txtConsultaAsistencia.Append("FROM Asistencia Where ")
                txtConsultaAsistencia.Append("Id_Empresa = " & My.Settings.Empresa.ToString).Append(" And ")
                txtConsultaAsistencia.Append("Contato = " & TablaContratos.Rows(n).Item("Codigo").ToString).Append(" And ")
                txtConsultaAsistencia.Append("Planilla = 1").Append(" And ")
                If Quin = 1 Then
                    txtConsultaAsistencia.Append("Fecha Between '").Append(DeFecha(Fecha0101)).Append("' And '").Append(DeFecha(Fecha0102)).Append("' ")
                ElseIf Quin = 2 Then
                    txtConsultaAsistencia.Append("Fecha Between '").Append(DeFecha(Fecha0101)).Append("' And '").Append(DeFecha(Fecha0202)).Append("' ")
                End If
                txtConsultaAsistencia.Append("Group By").Append(" Id_Empresa, Contrato, Cui, Empleado")

y esta seria en SQL:

Código: (sql) [Seleccionar]
Select
Id_Empresa,
Contato As Contrato,
Cui,
Empleado,
(Select Count(Tipo_Asistencia) As Normal From Asistencia Where Id_Empresa = 1 And Contato = 268 And Planilla = 1 And Tipo_Asistencia = 'NORMAL' And Fecha BETWEEN '2014/8/28' And '2014/9/12') As Primera,
(Select Sum(Monto_Ord) As Monto From Asistencia Where Id_Empresa = 1 And Contato = 268 And Planilla = 1 And Tipo_Asistencia = 'NORMAL' And Fecha BETWEEN '2014/8/28' And '2014/9/12') As Monto_Ord_1,
(Select Count(Tipo_Asistencia) As Normal From Asistencia Where Id_Empresa = 1 And Contato = 268 And Planilla = 1 And Tipo_Asistencia = 'NORMAL' And Fecha BETWEEN '2014/9/13' And '2014/9/27') As Segunda,
(Select Sum(Monto_Ord) As Monto From Asistencia Where Id_Empresa = 1 And Contato = 268 And Planilla = 1 And Tipo_Asistencia = 'NORMAL' And Fecha BETWEEN '2014/9/13' And '2014/9/27') As Monto_Ord_2,
(Select Count(Tipo_Asistencia) As Normal From Asistencia Where Id_Empresa = 1 And Contato = 268 And Planilla = 1 And Tipo_Asistencia = 'SEPTIMO') As Septimos,
(Select Sum(Monto_Ord) As Normal From Asistencia Where Id_Empresa = 1 And Contato = 268 And Planilla = 1 And Tipo_Asistencia = 'SEPTIMO') As Monto_Sep,
(Select Count(Tipo_Asistencia) As Normal From Asistencia Where Id_Empresa = 1 And Contato = 268 And Planilla = 1 And Tipo_Asistencia = 'ASUETO') As Asuetos,
(Select Sum(Tipo_Asistencia) As Normal From Asistencia Where Id_Empresa = 1 And Contato = 268 And Planilla = 1 And Tipo_Asistencia = 'ASUETO') As Monto_Asu,
SUM(Horas_Ord) AS Horas_Ord,
SUM(Horas_Ext) AS Horas_Ext,
SUM(Horas_Total) AS Horas_Total,
SUM(Monto_Ord) AS Monto_Ord,
SUM(Monto_Ext) AS Monto_Ext,
SUM(Monto_Decreto) AS Monto_Decreto,
SUM(Monto_Incentivo) AS Monto_Incentivo,
SUM(Monto_Total) AS Monto_Total
FROM Asistencia Where
Id_Empresa = 1 And
Contato = 268 And
Planilla = 1 And
Fecha Between '2014/8/28' And '2014/9/12'
Group By Id_Empresa, Contrato, Cui, Empleado

La Tabla es esta:



Todo trabaja bien, pero no se si es la forma más rapida y buena, no se si me entiendan, aunque el verdadero problema es que en la consulta de asuetos no me devuelve absolutamente nada, por que no hay nada, y yo quisiera que me devolviera al menos un 0, para no tenes que hacer algo con las variables, si no automaticamente que la consulta me devuelva 0. Gracias no se si me explique.

Código: (vb) [Seleccionar]
DiasLabAs = Integer.Parse(TablaAsistenciaTemporal.Rows(0).Item("Asuetos").ToString)
Monto_Sep = Val(TablaAsistenciaTemporal.Rows(0).Item("Monto_Sep").ToString)

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Consulta SQL con Valor 0
« Respuesta #1 en: Septiembre 17, 2014, 12:02:27 pm »
Hola,

Si lo que no quieres es que te devuelva NULL... Puedes usar en el Select la instrucción ISNULL... Se usa así

Código: (SQL) [Seleccionar]
SELECT ISNULL(CAMPO,0) as Valor
Miguel Núñez.

Luffy

  • Kilobyte
  • **
  • Mensajes: 90
  • Reputación: +4/-2
  • Desarrollar es el arte de crecer no de crear.
    • Ver Perfil
Re:Consulta SQL con Valor 0
« Respuesta #2 en: Septiembre 17, 2014, 12:33:02 pm »
Hola,

Si lo que no quieres es que te devuelva NULL... Puedes usar en el Select la instrucción ISNULL... Se usa así

Código: (SQL) [Seleccionar]
SELECT ISNULL(CAMPO,0) as Valor

Muchas Gracias por la respuesta.