【问题标题】:Conditional TSQL Grouping条件 TSQL 分组
【发布时间】:2012-01-20 02:19:02
【问题描述】:

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

当艺术家姓名不匹配但专辑名称匹配时,我如何有条件地将艺术家分组为“各种艺术家”?

这是我的简化 TSQL 语句:

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

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

提前感谢您的宝贵时间。

【问题讨论】:

  • 我猜你是 sql server 2008 及以上版本?

标签: sql sql-server tsql


【解决方案1】:

我没有对此进行测试,但总体思路应该很明显......

可以使用与 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

【讨论】:

  • 我必须将其作为存储过程传递还是有办法将其作为合并的 SELECT 执行?感谢您的答复。这很有帮助。
  • 您可以按原样执行它,作为选择语句。 CTE(WITH ..需要SQL 2005或更高版本,如果前面有SQL,需要在WITH关键字前加分号。msdn.microsoft.com/en-us/library/ms190766.aspx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 2015-06-23
  • 1970-01-01
  • 2013-11-12
相关资源
最近更新 更多