none
Cargar Dataset Con Varias Consultas Sql? RRS feed

  • Pregunta

  • Tengo un problema para para cargar unas consultas Sql a un reporte de Cristal Reports yo utilizo este codigo para cargar la consulta

     

    Private Sub frmPrincipales_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim conn As New MySqlConnection
            Dim ds As New DataSet
            Dim da As New MySqlDataAdapter
            Dim dt As New DataTable
            Dim comando As New MySqlCommand
            Dim reporte As New CrPrincipales
            dt.Clear()
            conn = New MySqlConnection(CadenaConexion)
            comando.Connection = conn
            comando.CommandTimeout = 0
            comando.CommandText = "SELECT     CONCAT(tbl_ganar.Nombres, ' ', tbl_ganar.Apellidos) AS Lider, tbl_lideres.CodLider, COUNT(tbl_ganar.Grupo) AS Enero " & _
            " FROM tbl_ganar RIGHT OUTER JOIN " & _
            " tbl_lideres ON tbl_ganar.CodLider = tbl_lideres.CodLider AND tbl_ganar.IdInternacional = @Internacional AND MONTH(tbl_ganar.Fecha_Ganado)  " & _
            " = 1 AND YEAR(tbl_ganar.Fecha_Ganado) = @AÑO AND tbl_lideres.IdInternacional = @Internacional " & _
            " WHERE (tbl_lideres.Principales = '12') AND (tbl_lideres.Red = @Red) " & _
            " GROUP BY tbl_lideres.CodLider "
            da = New MySqlDataAdapter(comando)
            da.Fill(dt)
            reporte.SetDataSource(dt)
            reporte.Refresh()
            CrystalReportViewer1.ReportSource = reporte
            CrystalReportViewer1.Refresh()
        End Sub

     

    Hasta y todo esta bien, solo que tengo que cargar la misma consulta otras Once veces porque debo sacar el conteo por todos los meses del año para colocarlos en el reporte, no se si hay forma de ejecutar una sola consulta y que sus resultados se muestren asi sin necesidad de escribir varias veces la misma consulta SQL cambiando el MONTH(tbl_ganar.Fecha_Ganado) = 1 por cada mes.

    ENERO FEBRERO ABRIL MAYO JUNIO

    15         20          15     30      10

     

    Ademas no se como cargar las 12 consultas al data set porque siempre he utilizado una sola consulta SQL para alimentar el DataSet.

     

    Agradezco de Antemano su colaboracion


    Jruiz
    lunes, 4 de julio de 2011 23:05

Respuestas

  • Buenas bimboclaim.

    Como bien comenta nuestro compañero Leandro utilizando UNION consigues tu propósito.

    Sería algo como:

     

     

    comando.CommandText = "SELECT  CONCAT(tbl_ganar.Nombres, ' ', tbl_ganar.Apellidos) AS Lider, tbl_lideres.CodLider, COUNT(tbl_ganar.Grupo) AS Enero, '' As Febrero, " & _
     "'' As Marzo, '' As Abril, '' As Mayo, '' As Junio, '' As Julio, '' As Agosto, '' As Septiembre, '' As Octubre, '' As Noviembre, '' As Diciembre " & _ " FROM tbl_ganar RIGHT OUTER JOIN " & _ " tbl_lideres ON tbl_ganar.CodLider = tbl_lideres.CodLider AND tbl_ganar.IdInternacional = @Internacional AND MONTH(tbl_ganar.Fecha_Ganado) " & _ " = 1 AND YEAR(tbl_ganar.Fecha_Ganado) = @AÑO AND tbl_lideres.IdInternacional = @Internacional " & _ " WHERE (tbl_lideres.Principales = '12') AND (tbl_lideres.Red = @Red) " & _ " GROUP BY tbl_lideres.CodLider " & _ " UNION " & _
    "SELECT CONCAT(tbl_ganar.Nombres, ' ', tbl_ganar.Apellidos) AS Lider, tbl_lideres.CodLider, '' AS Enero, COUNT(tbl_ganar.Grupo) As Febrero, '' As Marzo, " & _
    "'' As Abril, '' As Mayo, '' As Junio, '' As Julio, '' As Agosto, '' As Septiembre, '' As Octubre, '' As Noviembre, '' As Diciembre " & _ " FROM tbl_ganar RIGHT OUTER JOIN " & _ " tbl_lideres ON tbl_ganar.CodLider = tbl_lideres.CodLider AND tbl_ganar.IdInternacional = @Internacional AND MONTH(tbl_ganar.Fecha_Ganado) " & _ " = 2 AND YEAR(tbl_ganar.Fecha_Ganado) = @AÑO AND tbl_lideres.IdInternacional = @Internacional " & _ " WHERE (tbl_lideres.Principales = '12') AND (tbl_lideres.Red = @Red) " & _ " GROUP BY tbl_lideres.CodLider UNION"

     

     

    Fíjate que lo que cambia es el Campo Enero en la primera SELECT, el Campo Febrero en la segunda SELECT, .. y en la condición le vas cambiando 1, 2, .. ya tu continúa con los meses que faltan (Esto solo muestra los resultados de Enero y Febrero).

    Si tienes alguna duda coméntanos.

    Un saludo.

     

    Edito que se salía de los márgenes la consulta SQL.

     


    Antonio López Atienza
    Microsoft Community Contributor
    .NET Developer
    Code examples
    http://www.lopezatienza.es
    martes, 5 de julio de 2011 6:44
  • pero no necesitas ejecutar la misma consulta crea una sola y une el resultado usando el

    T-SQL UNION

    entocnes pdorias suanir el resultadod evuelto por cada mes de todas las consultas en un solo datatable

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 5 de julio de 2011 1:24

Todas las respuestas

  • pero no necesitas ejecutar la misma consulta crea una sola y une el resultado usando el

    T-SQL UNION

    entocnes pdorias suanir el resultadod evuelto por cada mes de todas las consultas en un solo datatable

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 5 de julio de 2011 1:24
  • Hola Leandro he realizado el procedimeinto como me dijiste pero ocurre que el dataSet no me carga el Campo Febrero que he creado en el reporte sino que une la consulta y sigue mostrando hacia abajo como una una consulta normal;  estos son los resultados; deberia colocarse el siguiente valor en frente que es febrero.

     COD                             LIDER                                                             ENERO      FEBRERO

    0101 GFD GFD 0
    0102 JHON JAIME RUIZ ROJAS 0
    0103 DIEGO GERMAN Probando 0
    0104 0
    0105 0
    0106 0
    0107 0
    0108 0
    0109 0
    0110 0
    0111 0
    0112 0
    0101 GFD GFD 0
    0102 JHON JAIME RUIZ ROJAS 1
    0103 DIEGO GERMAN Probando 0
    0104 0
    0105 0
    0106 0
    0107 0
    0108 0
    0109 0
    0110 0
    0111 0
    0112 0

     

     


    Jruiz
    martes, 5 de julio de 2011 4:02
  • Buenas bimboclaim.

    Como bien comenta nuestro compañero Leandro utilizando UNION consigues tu propósito.

    Sería algo como:

     

     

    comando.CommandText = "SELECT  CONCAT(tbl_ganar.Nombres, ' ', tbl_ganar.Apellidos) AS Lider, tbl_lideres.CodLider, COUNT(tbl_ganar.Grupo) AS Enero, '' As Febrero, " & _
     "'' As Marzo, '' As Abril, '' As Mayo, '' As Junio, '' As Julio, '' As Agosto, '' As Septiembre, '' As Octubre, '' As Noviembre, '' As Diciembre " & _ " FROM tbl_ganar RIGHT OUTER JOIN " & _ " tbl_lideres ON tbl_ganar.CodLider = tbl_lideres.CodLider AND tbl_ganar.IdInternacional = @Internacional AND MONTH(tbl_ganar.Fecha_Ganado) " & _ " = 1 AND YEAR(tbl_ganar.Fecha_Ganado) = @AÑO AND tbl_lideres.IdInternacional = @Internacional " & _ " WHERE (tbl_lideres.Principales = '12') AND (tbl_lideres.Red = @Red) " & _ " GROUP BY tbl_lideres.CodLider " & _ " UNION " & _
    "SELECT CONCAT(tbl_ganar.Nombres, ' ', tbl_ganar.Apellidos) AS Lider, tbl_lideres.CodLider, '' AS Enero, COUNT(tbl_ganar.Grupo) As Febrero, '' As Marzo, " & _
    "'' As Abril, '' As Mayo, '' As Junio, '' As Julio, '' As Agosto, '' As Septiembre, '' As Octubre, '' As Noviembre, '' As Diciembre " & _ " FROM tbl_ganar RIGHT OUTER JOIN " & _ " tbl_lideres ON tbl_ganar.CodLider = tbl_lideres.CodLider AND tbl_ganar.IdInternacional = @Internacional AND MONTH(tbl_ganar.Fecha_Ganado) " & _ " = 2 AND YEAR(tbl_ganar.Fecha_Ganado) = @AÑO AND tbl_lideres.IdInternacional = @Internacional " & _ " WHERE (tbl_lideres.Principales = '12') AND (tbl_lideres.Red = @Red) " & _ " GROUP BY tbl_lideres.CodLider UNION"

     

     

    Fíjate que lo que cambia es el Campo Enero en la primera SELECT, el Campo Febrero en la segunda SELECT, .. y en la condición le vas cambiando 1, 2, .. ya tu continúa con los meses que faltan (Esto solo muestra los resultados de Enero y Febrero).

    Si tienes alguna duda coméntanos.

    Un saludo.

     

    Edito que se salía de los márgenes la consulta SQL.

     


    Antonio López Atienza
    Microsoft Community Contributor
    .NET Developer
    Code examples
    http://www.lopezatienza.es
    martes, 5 de julio de 2011 6:44