Условная группировка TSQL - PullRequest
1 голос
/ 20 января 2012

Я пытаюсь создать оператор TSQL, который будет группировать альбом и исполнителей и сортировать их по имени исполнителя. Каждый трек содержит все данные ID3 с именами альбомов и исполнителей. Если в некоторых альбомах несколько исполнителей, порядок сортировки нарушается.

Как условно сгруппировать исполнителей как "Разные исполнители", если имена исполнителей не совпадают, но имена альбомов совпадают?

Вот мое упрощенное утверждение TSQL:

SELECT songid, artist, album, tracknumber 
FROM mp3
ORDER BY artist, album, tracknumber

Если это имеет значение, то это Microsoft SQL Server, в котором я работаю.

Заранее спасибо за ваше время.

1 Ответ

3 голосов
/ 20 января 2012

Я не проверял это, но, тем не менее, общая идея должна быть очевидной ...

То же выражение, которое используется для поля AlbumArtist, может использоваться для группировки.

WITH
   VariousArtistsCTE
   AS
   (SELECT
      album,
      CASE WHEN 
         COUNT(DISTINCT Artist) = 1
      THEN
         0
      ELSE
         1
      END AS VariousArtists
   FROM mp3
   GROUP BY album)

SELECT
   songid,
   artist AS TrackArtist,
   album,
   tracknumber
   CASE WHEN va.VariousArtists = 1 THEN 'Various Artists'
   ELSE artist END As AlbumArtist 
FROM
   mp3
LEFT OUTER JOIN
   VariousArtistsCTE va
   ON mp3.Album = va.Album
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...