条件TSQL分组

时间:2012-01-20 02:19:02

标签: sql sql-server tsql

我正在尝试制作一个TSQL语句,它将对专辑和艺术家进行分组并按艺术家名称排序。每首曲目都包含所有带有专辑和艺术家姓名的ID3数据。当某些专辑有多个艺术家时,排序顺序会搞砸。

如果艺术家名称不匹配但专辑名称不合适,我如何有条理地将艺术家分组为“群星艺术家”?

这是我简化的TSQL语句:

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

如果重要的话,这就是我正在使用的Microsoft SQL Server。

提前感谢您的时间。

1 个答案:

答案 0 :(得分:3)

我没有对此进行测试,但总体思路应该是显而易见的......

用于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