Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Изберете обратно списък, разделен със запетая, групиран по идентификатор

select ET1.EntryID,
       (
       select ', '+T.Name
       from Tags as T
         inner join EntryTag as ET2
           on T.TagID = ET2.TagID
       where ET1.EntryID = ET2.EntryID
       for xml path(''), type
       ).value('substring(text()[1], 3)', 'varchar(max)') as TagsCommaDelimited
from EntryTag as ET1
group by ET1.EntryID

Разбиране на заявката

Основната заявка прави group by така че получавате само един ред за всеки EntryID .

Колоната TagsCommaDelimited се създава с корелирана подзаявка.

В SQL Server for xml path се използва за създаване на XML представяне на резултат от заявка. Имате добър контрол върху това как се създава XML чрез използване на псевдоними на колони и параметри към path и root .

Свързаната стойност ', '+T.Name в свързаната подзаявка няма да има име на колона и празен параметър за for xml path('') създава xml без никакви тагове. Ще бъде върната само една текстова стойност.

Когато добавите type към for xml заявка типът данни ще бъде XML .

За да получите стойност от XML, трябва да използвате value() метод. Можете да прехвърляте към низ, но ако го направите, ще получите например & в низа, където и да сте използвали & .

Първият параметър в value() функцията е изразът xQuery, използван за получаване на желаната от вас стойност. Използвайте text() за да посочите, че искате само стойността за текущия елемент. [1] казва на SQL Server, че искате да бъде намерен първият текстов възел (тук имате само един), но все пак е необходимо.

Низът, създаден от for xml заявката има допълнителна запетая и интервал в началото на низа и това трябва да бъде премахнато. Тук използвам функцията XQuery substring за да получите всичко освен първите два знака.

Вторият параметър към value() определя типа данни, които трябва да бъдат върнати.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да вмъкнете блоб в база данни с помощта на sql сървърно студио за управление

  2. Добавете колони към съществуваща таблица в базата данни на SQL Server

  3. Как да намеря последователни редове въз основа на стойността на колона?

  4. Вземете информация за изглед с изгледа на информационна схема VIEWS в SQL Server

  5. Вземете ден от седмицата в SQL Server 2005/2008