Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
条件TSQL分组_Sql_Sql Server_Tsql - Fatal编程技术网

条件TSQL分组

条件TSQL分组,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在尝试制作一个TSQL语句,将专辑和艺术家分组,并按艺术家姓名排序。每首曲目都有带有唱片集和艺术家姓名的所有ID3数据。当某些专辑有多个艺术家时,排序顺序就会混乱 当艺术家名称不匹配但专辑名称匹配时,我如何有条件地将艺术家分组为“各种艺术家” 以下是我的简化TSQL语句: SELECT songid, artist, album, tracknumber FROM mp3 ORDER BY artist, album, tracknumber 如果重要的话,这就是我工作的Microsof

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

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

以下是我的简化TSQL语句:

SELECT songid, artist, album, tracknumber 
FROM mp3
ORDER BY artist, album, tracknumber
如果重要的话,这就是我工作的Microsoft SQL Server


提前感谢您的时间。

我还没有测试过这一点,但总体思路应该是显而易见的

AlbumArtister字段中使用的表达式可用于分组

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

我假定您是sql server 2008及更高版本?我是否必须将其作为存储过程传递,或者是否有方法将其作为合并选择执行?谢谢你的回复。这非常有帮助。您可以按原样执行它,作为select语句。CTE(
WITH..
需要SQL 2005或更高版本,如果前面有SQL,则需要在
WITH
关键字前面添加分号。