Come darti torto?! Effettivamente sono stato un po' laconico. Riprovo.
Devo generare una tabella HTML dinamica da SQLServer, non solo dinamica in termini di righe, ma anche di colonne.
Prova adesso questo codice:
declare @tableUPDATE_ERR varchar(max)
declare @css varchar(max)
print '--- PRIMO METODO FUNZIONANTE (TUTTE LE COLONNE)--- '
IF OBJECT_ID(N'mydb.dbo.GIOCATORI') IS NOT NULL DROP TABLE mydb.dbo.GIOCATORI
CREATE TABLE mydb.dbo.GIOCATORI (PLAYER VARCHAR(10),"2010" VARCHAR(10),"2011" VARCHAR(10),"2012" VARCHAR(10),"2013" VARCHAR(10),"2014" VARCHAR(10),"2015" VARCHAR(10),"2016" VARCHAR(10),"2017" VARCHAR(10),"2018" VARCHAR(10),"2019" VARCHAR(10),"2020" VARCHAR(10))
INSERT INTO mydb.dbo.GIOCATORI VALUES ('Rossi' , '', '', '', '', '', '', '', '', 'X', '', 'X')
INSERT INTO mydb.dbo.GIOCATORI VALUES ('Bianchi' , '', '', '', '', '', '', '', 'X', 'X', '', '')
INSERT INTO mydb.dbo.GIOCATORI VALUES ('Verdi' , 'X', '', '', '', '', '', '', '', '', '', '')
INSERT INTO mydb.dbo.GIOCATORI VALUES ('Gialli' , '', '', '', '', '', '', '', '', '', '', '')
INSERT INTO mydb.dbo.GIOCATORI VALUES ('Blu' , '', '', 'X', 'X', 'X', '', '', '', '', '', '')
SET @CSS =
N'<style type="text/css">' +
N' table, p { font-size:13px;' +
N' font-family:Arial;}' +
N' div { max-height:300px;overflow:auto; }' +
N' tr th {color:#ff0000 ;}' +
N'</style>';
SET @tableUPDATE_ERR=
'<table cellspacing="0" border="1"><caption></caption><tr><th>PLAYER</th><th>2010</th><th>2011</th><th>2012</th><th>2013</th><th>2014</th><th>2015</th><th>2016</th><th>2017</th><th>2018</th><th>2019</th><th>2020</th></tr>'+
CAST(
(
SELECT
TD="PLAYER",''
, TD="2010" ,''
, TD="2011" ,''
, TD="2012" ,''
, TD="2013" ,''
, TD="2014" ,''
, TD="2015" ,''
, TD="2016" ,''
, TD="2017" ,''
, TD="2018" ,''
, TD="2019" ,''
, TD="2020" ,''
FROM mydb.dbo.GIOCATORI
FOR XML PATH('tr'),type
) AS VARCHAR(MAX))+'</table>';
SET @tableUPDATE_ERR = @CSS + '<br />'+@tableUPDATE_ERR
print (@tableUPDATE_ERR)
Se incolli la print in un file HTML vedrai che ci sono delle colonne inutilizzate, vorrei rimuoverle, ma come?!
Mi sono fatto la punta al cervello e alla fine ho risolto con un replace:
declare @tableUPDATE_ERR varchar(max)
declare @css varchar(max)
print '--- QUARTO METODO --- '
IF OBJECT_ID(N'mydb.dbo.GIOCATORI4') IS NOT NULL DROP TABLE mydb.dbo.GIOCATORI4
CREATE TABLE mydb.dbo.GIOCATORI4 (PLAYER VARCHAR(10),"2010" VARCHAR(10),"2011" VARCHAR(10),"2012" VARCHAR(10),"2013" VARCHAR(10),"2014" VARCHAR(10),"2015" VARCHAR(10),"2016" VARCHAR(10),"2017" VARCHAR(10),"2018" VARCHAR(10),"2019" VARCHAR(10),"2020" VARCHAR(10))
INSERT INTO mydb.dbo.GIOCATORI4 VALUES ('Rossi' , '', '', '', '', '', '', '', '', 'X', '', 'X')
INSERT INTO mydb.dbo.GIOCATORI4 VALUES ('Bianchi' , '', '', '', '', '', '', '', 'X', 'X', '', '')
INSERT INTO mydb.dbo.GIOCATORI4 VALUES ('Verdi' , 'X', '', '', '', '', '', '', '', '', '', '')
INSERT INTO mydb.dbo.GIOCATORI4 VALUES ('Gialli' , '', '', '', '', '', '', '', '', '', '', '')
INSERT INTO mydb.dbo.GIOCATORI4 VALUES ('Blu' , '', '', 'X', 'X', 'X', '', '', '', '', '', '')
SET @CSS =
N'<style type="text/css">' +
N' table, p { font-size:13px;' +
N' font-family:Arial;}' +
N' div { max-height:300px;overflow:auto; }' +
N' tr th {color:#ff0000 ;}' +
N'</style>';
SET @tableUPDATE_ERR= '
<table cellspacing="0" border="1"><caption></caption><tr>
<th>PLAYER</th> ' +
+ CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2010"!= '')>0 THEN '<th>2010</th>' ELSE '<th>$ColumnEmpty$</th>' END + '
' + CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2011"!= '')>0 THEN '<th>2011</th>' ELSE '<th>$ColumnEmpty$</th>' END + '
' + CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2012"!= '')>0 THEN '<th>2012</th>' ELSE '<th>$ColumnEmpty$</th>' END + '
' + CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2013"!= '')>0 THEN '<th>2013</th>' ELSE '<th>$ColumnEmpty$</th>' END + '
' + CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2014"!= '')>0 THEN '<th>2014</th>' ELSE '<th>$ColumnEmpty$</th>' END + '
' + CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2015"!= '')>0 THEN '<th>2015</th>' ELSE '<th>$ColumnEmpty$</th>' END + '
' + CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2016"!= '')>0 THEN '<th>2016</th>' ELSE '<th>$ColumnEmpty$</th>' END + '
' + CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2017"!= '')>0 THEN '<th>2017</th>' ELSE '<th>$ColumnEmpty$</th>' END + '
' + CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2018"!= '')>0 THEN '<th>2018</th>' ELSE '<th>$ColumnEmpty$</th>' END + '
' + CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2019"!= '')>0 THEN '<th>2019</th>' ELSE '<th>$ColumnEmpty$</th>' END + '
' + CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2020"!= '')>0 THEN '<th>2020</th>' ELSE '<th>$ColumnEmpty$</th>' END +
'
</tr>'+
CAST(
(
SELECT
TD= "PLAYER" ,''
, TD= CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2010"!= '')>0 THEN "2010" ELSE '$ColumnEmpty$' END,''
, TD= CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2011"!= '')>0 THEN "2011" ELSE '$ColumnEmpty$' END,''
, TD= CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2012"!= '')>0 THEN "2012" ELSE '$ColumnEmpty$' END,''
, TD= CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2013"!= '')>0 THEN "2013" ELSE '$ColumnEmpty$' END,''
, TD= CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2014"!= '')>0 THEN "2014" ELSE '$ColumnEmpty$' END,''
, TD= CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2015"!= '')>0 THEN "2015" ELSE '$ColumnEmpty$' END,''
, TD= CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2016"!= '')>0 THEN "2016" ELSE '$ColumnEmpty$' END,''
, TD= CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2017"!= '')>0 THEN "2017" ELSE '$ColumnEmpty$' END,''
, TD= CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2018"!= '')>0 THEN "2018" ELSE '$ColumnEmpty$' END,''
, TD= CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2019"!= '')>0 THEN "2019" ELSE '$ColumnEmpty$' END,''
, TD= CASE WHEN (select count(*) from mydb.dbo.GIOCATORI4 where "2020"!= '')>0 THEN "2020" ELSE '$ColumnEmpty$' END,''
FROM mydb.dbo.GIOCATORI4
FOR XML PATH('tr'),type
) AS VARCHAR(MAX))+'</table>';
SET @tableUPDATE_ERR= replace(@tableUPDATE_ERR,'<TD>$ColumnEmpty$</TD>','')
SET @tableUPDATE_ERR= replace(@tableUPDATE_ERR,'<Th>$ColumnEmpty$</Th>','')
SET @tableUPDATE_ERR = @CSS + '<br />'+@tableUPDATE_ERR
print (@tableUPDATE_ERR)
Quindi ho risolto, pensavo di giocarmela con un cursore, invece me la sono cavata con una banalissima replace.
Ti ringrazio ad ogni modo di aver trovato il tempo e di leggere e rispondere al mio post.
Se poi vogliamo confrontarci sulla soluzione (un po' cozzala), a disposizione.