SELECT T.* ,i.DescrizioneTipologia ,f.DescrizioneStatoProdotto ,n.DescrizioneFormato ,y.DescrizioneCollana ,z.AutoriCompleti ,i2.DescrArgomento ,z3.CasaEditrice ,q.QtaDisponibile FROM T_WEB_Articoli T WITH (noLock) RIGHT JOIN ( SELECT IdArticolo, MAX(DataOra) AS data FROM T_WEB_Articoli GROUP BY IdArticolo ) b ON T.IdArticolo = b.IdArticolo AND T.DataOra = b.data RIGHT JOIN ( SELECT e.IdStatoProdotto, e.Descrizione as DescrizioneStatoProdotto FROM T_WEB_StatiProdotto e JOIN ( SELECT IdStatoProdotto, MAX(DataOra) as data1 FROM T_WEB_StatiProdotto GROUP BY IdStatoProdotto ) c ON e.IdStatoProdotto = c.IdStatoProdotto AND e.DataOra = c.data1 ) f ON T.IdStatoProdotto = f.IdStatoProdotto RIGHT JOIN ( SELECT g.IdTipologia, g.Descrizione as DescrizioneTipologia FROM T_WEB_Tipologie g JOIN ( SELECT IdTipologia, MAX(DataOra) as data1 FROM T_WEB_Tipologie GROUP BY IdTipologia ) h ON g.IdTipologia = h.IdTipologia AND g.DataOra = h.data1 ) i ON T.IdTipologia = i.IdTipologia RIGHT JOIN ( SELECT l.IdTipoFormato, l.Descrizione as DescrizioneFormato FROM T_WEB_TipiFormato l JOIN ( SELECT IdTipoFormato, MAX(DataOra) as data1 FROM T_WEB_TipiFormato GROUP BY IdTipoFormato ) m ON l.IdTipoFormato = m.IdTipoFormato AND l.DataOra = m.data1 ) n ON T.IdTipoFormato = n.IdTipoFormato RIGHT JOIN ( SELECT v.IdCollana, v.Descrizione as DescrizioneCollana FROM T_WEB_Collane v INNER JOIN ( SELECT IdCollana, MAX(ID) as MaxID FROM T_WEB_Collane GROUP BY IdCollana ) x ON v.IdCollana = x.IdCollana AND v.ID = x.MaxID ) y ON T.IdCollana = y.IdCollana RIGHT JOIN ( SELECT g2.IdArgomento, g2.Descrizione as DescrArgomento FROM T_WEB_Argomenti g2 INNER JOIN ( SELECT IdArgomento, MAX(DataOra) as data12 FROM T_WEB_Argomenti GROUP BY IdArgomento ) h ON g2.IdArgomento = h.IdArgomento AND g2.DataOra = h.data12 ) i2 ON T.ListaArgomenti = i2.IdArgomento RIGHT JOIN ( SELECT o.Codice, o.QtaDisponibile FROM T_WEB_Disponibile o JOIN ( SELECT Codice, MAX(DataOra) as data1 FROM T_WEB_Disponibile GROUP BY Codice ) p ON o.Codice = p.Codice AND o.DataOra = p.data1 ) q ON T.IdArticolo = q.Codice RIGHT JOIN ( SELECT a3.IdMarchioEditoriale, a3.Descrizione as CasaEditrice FROM T_WEB_MarchiEditoriali a3 JOIN ( SELECT IdMarchioEditoriale, MAX(DataOra) as maxData FROM T_WEB_MarchiEditoriali GROUP BY IdMarchioEditoriale ) aa3 ON a3.IdMarchioEditoriale = aa3.IdMarchioEditoriale AND a3.DataOra = aa3.maxData ) z3 ON T.IdMarchioEditoriale = z3.IdMarchioEditoriale RIGHT JOIN ( SELECT T1.IdArticolo, STUFF(( SELECT ',' + ISNULL(A2.AutoreCompleto, '') FROM ( SELECT CAST('' + REPLACE(T1.ListaAutori, ',', '') + '' AS XML) AS DataXML ) X CROSS APPLY X.DataXML.nodes('/root/x') AS A(x) CROSS APPLY ( SELECT TRY_CAST(LTRIM(RTRIM(A.x.value('.', 'VARCHAR(100)'))) AS INT) AS AutoreID ) CA LEFT JOIN ( SELECT a.IdAutore, CONCAT(a.Nome, ' ', a.Cognome) AS AutoreCompleto FROM T_WEB_Autori a RIGHT JOIN ( SELECT IdAutore, MAX(DataOra) AS maxData FROM T_WEB_Autori GROUP BY IdAutore ) aa ON a.IdAutore = aa.IdAutore AND a.DataOra = aa.maxData ) A2 ON CA.AutoreID = A2.IdAutore FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') , 1 , 1 , '') AS AutoriCompleti FROM T_WEB_Articoli T1 WHERE t1.DataOra = (select max(DataOra) AS DataOra from T_web_articoli As h WHERE h.IdArticolo = T1.IdArticolo) GROUP BY T1.IdArticolo, T1.ListaAutori ) z ON T.IdArticolo = z.IdArticolo WHERE ( DescrizioneStatoProdotto = 'In commercio' OR DescrizioneStatoProdotto = 'Prossima uscita/pubblicazione' OR DescrizioneStatoProdotto = 'Prossima uscita' OR DescrizioneStatoProdotto = 'In prevendita' OR DescrizioneStatoProdotto = '2023 in commercio') AND ( DescrizioneTipologia = 'Libri' OR DescrizioneTipologia = 'Cartolibro' OR DescrizioneTipologia = 'Carte') AND ( Ean13 NOT LIKE 'USATO%') ORDER BY T.IdArticolo DESC, Id DESC