come faccio s semplificare questa query?
inoltre vorrei estrarre i record e ordinarli in base ad ogni categoria associata e alla fine di ogni estrazione degli articoli della categoria aggiungere una riga nel datagrid con i totali parziali e alla fine di tutto i totali definitivi.

tipo nell'esempio in allegato
esempio

codice:
        Dim anagr As System.Data.OleDb.OleDbDataReader
        Dim dbComm As OleDbCommand = New OleDbCommand("SELECT * FROM articoli", conn)

        dbComm.CommandType = CommandType.Text
        Try
            anagr = dbComm.ExecuteReader()
        Catch ex As Exception
            Exit Sub
        End Try
        Do While anagr.Read
            
            Dim anagr3 As System.Data.OleDb.OleDbDataReader
            Dim dbComm3 As OleDbCommand = New OleDbCommand("SELECT qta,prezzoV_1 FROM scarico where codice=@cod and data between @dat_i and @dat_f", conn) '  group by prezzoV_1,prezzoV_2", conn)
            dbComm3.Parameters.AddWithValue("@cod", anagr("codice").ToString) '
            dbComm3.Parameters.AddWithValue("@dat_i", dtinizio.Text)
            dbComm3.Parameters.AddWithValue("@dat_f", dtfine.Text)


            dbComm3.CommandType = CommandType.Text
            Try
                anagr3 = dbComm3.ExecuteReader()
            Catch ex As Exception
                Exit Sub
            End Try
            Dim prezzo As Decimal = "0,00"
            Do While anagr3.Read
                tot_scar = CDec(tot_scar) + CDec(anagr3("prezzoV_1"))
                q_scar = q_scar + CDec(anagr3("qta"))
                prezzo = anagr3("prezzoV_1")

            Loop
            Try
                q_res = anagr("quantita").ToString
                tot_res = CDec(prezzo * q_res)
            Catch
            End Try

            Dim anagr2 As System.Data.OleDb.OleDbDataReader
            Dim dbComm2 As OleDbCommand = New OleDbCommand("SELECT  quantita, prezzo FROM documenti_acq where codice=@cod", conn)
            dbComm2.Parameters.AddWithValue("@cod", anagr("codice").ToString)
            dbComm2.CommandType = CommandType.Text

            Try

                anagr2 = dbComm2.ExecuteReader()

            Catch ex As Exception
                Exit Sub
            End Try
            Do While anagr2.Read
                Try
                    q_car = q_car + anagr2("quantita")
                    tot_car = tot_car + (CDec(anagr2("prezzo") * anagr2("quantita")))
                Catch
                End Try
                'tot_car = tot_car * q_car
            Loop
            DataGrid.Rows.Add(anagr("codice").ToString, anagr("descrizione").ToString, q_car, FormatNumber(CDec(tot_car), 2, TriState.UseDefault), q_scar, FormatNumber(CDec(tot_scar), 2, TriState.UseDefault), FormatNumber(CDec(tot_scar) - CDec(tot_car), 2, TriState.UseDefault), q_res, FormatNumber(CDec(tot_res), 2, TriState.UseDefault), q_scar - q_car)
            q_scar = 0
            tot_scar = "0,00"
            q_car = 0
            tot_car = "0,00"
            q_res = 0
            tot_res = "0,00"
        Loop