Ho un problema di allineamento su una GridView, vi faccio un esempio per spiegarmi
PUBBLIC SUB Button_Click()
DIM i AS Integer
DIM dResult AS Result
DIM dSQL AS String
GridView1.Columns.Count = 4
GridView1.Columns[0].Title = "Località"
GridView1.Columns[1].Title = "Garanzia 1"
GridView1.Columns[2].Title = "Garanzia 2"
GridView1.Columns[3].Title = "Garanzia 3"
WITH GridView1
.Columns[0].Width = 200
.Columns[1].Width = 150
.Columns[2].Width = 150
.Columns[3].Width = 150
END WITH
dSQL = "SELECT localita, codiceintervento, count(*) AS totale"
dSQL &= " FROM interventi"
dSQL &= " WHERE anno = 11"
dSQL &= " GROUP BY localita, codiceintervento"
dSQL &= " ORDER BY localita"
dResult = Connection.db.Exec(dSQL)
GridView1.Rows.Count = dResult.Count
GridView1.Columns.Count = 4
GridView1.Clear
FOR EACH dResult
i = dResult.Index
GridView1[i, 0].Text = dResult["localita"]
IF dResult!codiceintervento = "66" THEN GridView1[i, 1].Text = dResult["totale"]
IF dResult!codiceintervento = "62" THEN GridView1[i, 2].Text = dResult["totale"]
IF dResult!codiceintervento = "58" THEN GridView1[i, 3].Text = dResult["totale"]
NEXT
END
con questo codice ottengo questo risultato:
LOCALITA' GARANZIA 1 GARANZIA 2 GARANZIA 3
Milano 3
Milano 1
Roma 1
Roma 2
Roma 1
io vorrei che i dati (i numeri) relativi alla stessa località venissero visualizzati sulla stessa riga della GridView
questa query, grazie a subquery, ti raggruppa i record come vuoi tu nei seguenti campi: localita, garanzia1, garanzia2 e garanzia3
SELECT citta.localita AS localita, garanzia1.intervento AS garanzia1, garanzia2.intervento AS garanzia2, garanzia3.intervento AS garanzia3
FROM (SELECT localita FROM interventi GROUP BY localita) AS citta LEFT JOIN
(SELECT localita, count(*) as intervento FROM interventi WHERE anno=11 AND codiceintervento=66 GROUP BY localita) AS garanzia1 ON citta.localita = garanzia1.localita LEFT JOIN
(SELECT localita, count(*) as intervento FROM interventi WHERE anno=11 AND codiceintervento=62 GROUP BY localita) AS garanzia2 ON citta.localita = garanzia2.localita LEFT JOIN
(SELECT localita, count(*) as intervento FROM interventi WHERE anno=11 AND codiceintervento=58 GROUP BY localita) AS garanzia3 ON citta.localita = garanzia3.localita
ORDER BY citta.localita;
Il problema e' che ti tocchera' fare una subquery per ogni codice intervento... forse ti conviene buttar giu' un po' di codice per raggruppare il tutto direttamente sulla griglia
anzi ho detto un stronz...
SELECT citta.localita AS localita, CASE WHEN garanzia1.intervento<>0 THEN garanzia1.intervento ELSE 0 END AS garanzia1,
CASE WHEN garanzia2.intervento<>0 THEN garanzia2.intervento ELSE 0 END AS garanzia2,
CASE WHEN garanzia3.intervento<>0 THEN garanzia3.intervento ELSE 0 END AS garanzia3
FROM (SELECT localita FROM interventi WHERE anno=11 GROUP BY localita) AS citta LEFT JOIN
(SELECT localita, count(*) as intervento FROM interventi WHERE anno=11 AND codiceintervento=66 GROUP BY localita) AS garanzia1 ON citta.localita = garanzia1.localita LEFT JOIN
(SELECT localita, count(*) as intervento FROM interventi WHERE anno=11 AND codiceintervento=62 GROUP BY localita) AS garanzia2 ON citta.localita = garanzia2.localita LEFT JOIN
(SELECT localita, count(*) as intervento FROM interventi WHERE anno=11 AND codiceintervento=58 GROUP BY localita) AS garanzia3 ON citta.localita = garanzia3.localita
WHERE (garanzia1+garanzia2+garanzia3) > 0
ORDER BY citta.localita;