2012-01-20 90 views
1

我正在嘗試製作一個TSQL語句,它將按照藝術家名稱對相冊和藝術家進行分組。每首曲目都有ID3數據和專輯名稱。當某些相冊擁有多個藝術家時,排序順序會變得混亂。有條件的TSQL分組

當藝術家的名字不匹配但是專輯名稱有用時,我如何有條件地將藝術家分組爲「羣星」?

這裏是我的簡單的TSQL語句:

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

如果它的事項。這是我在我工作的Microsoft SQL Server

預先感謝您的寶貴時間。

+0

我認爲你是sql server 2008及以上? – cctan

+0

該服務器是2008 R2。 –

回答

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 
+0

我需要將它作爲一個存儲過程來傳遞,還是有辦法將它作爲一個整合的SELECT來執行?感謝您的答覆。這非常有幫助。 –

+0

您可以按照原樣執行此操作,作爲select語句。 CTE('WITH ..'需要SQL 2005或更高版本,如果在此之前有任何SQL,則需要在'WITH'關鍵字前添加一個分號。http://msdn.microsoft.com/zh-cn/ -us /庫/ ms190766.aspx –