sql >> Databáze >  >> RDS >> Sqlserver

Zřetězení řádků s FOR XML, ale s více sloupci?

Mohl bys udělat něco takového. Namísto okamžitého odeslání hodnoty XML do řetězce tento dotaz používá klíčové slovo TYPE k vrácení objektu typu xml, na který lze poté dotazovat. Tři funkce dotazu vyhledávají v objektu xml všechny výskyty prvku Somefield a vrátí nový objekt xml obsahující právě tyto hodnoty. Poté funkce value odstraní xml tagy obklopující hodnoty a předá je do varchar(max)

SELECT  ThisTable.ID
       ,[A].query('/Somefield').value('/', 'varchar(max)') AS [SomeField_Combined]
       ,[A].query('/Somefield2').value('/', 'varchar(max)') AS [SomeField2_Combined]
       ,[A].query('/Somefield3').value('/', 'varchar(max)') AS [SomeField3_Combined]
FROM    ThisTable
        OUTER APPLY (
                     SELECT (
                             SELECT SomeField + ' ' AS [SomeField]
                                   ,SomeField2 + ' ' AS [SomeField2]
                                   ,SomeField3 + ' ' AS [SomeField3]
                             FROM   SomeTable
                             WHERE  SomeTable.ID = ThisTable.ID
                            FOR
                             XML PATH('')
                                ,TYPE
                            ) AS [A]
                    ) [A]


  1. Dotaz nevrací žádné výsledky, pouze pokud je přidáno ORDER BY

  2. REPLACE INTO vs

  3. ALTER sloupce z více tabulek ve stejném dotazu

  4. MySQL dotaz - problém s objednávkou podle