0
我一直試圖讓這個工作一段時間,所以有時間問。我正在使用SQL Server CE 4.0,下面的SQL語句會返回記錄,但我試圖向它添加一個更多的需求。SQL Server CE 4.0按排序順序選擇記錄
在ShowSongRef
表中,有SongOrder
列。我只想返回歌曲所在的節目。
換句話說,對於SongID的硬編碼,它們需要有1和2或4和5的SongOrder
,任何組合,只要它是有序的,一首歌曲正好在另一個之後播放,它可以是一組歌曲(超過兩個)。
SELECT sh.ID
FROM Songs s
INNER JOIN ShowSongRef ref ON ref.SongID = s.ID
INNER JOIN Shows sh ON sh.ID = ref.ShowID
WHERE ref.SongID IN ('654', '321')
--ORDER BY sh.ID, ref.SongOrder
所有需要的是sh.ID,所以我一直在嘗試GROUP BY,沒有運氣。 任何輸入讚賞。
謝謝!
編輯:
下面是一些SQL實際運行和測試
的選擇以下建議是行不通的。
DECLARE @Shows TABLE (ID INT)
INSERT INTO @Shows (ID) VALUES (1)
INSERT INTO @Shows (ID) VALUES (1546)
DECLARE @Songs TABLE (ID INT, Name VARCHAR(256))
INSERT INTO @Songs (ID, Name) VALUES (1, 'Song 1')
INSERT INTO @Songs (ID, Name) VALUES (2, 'Song 2')
INSERT INTO @Songs (ID, Name) VALUES (3, 'Song 3')
INSERT INTO @Songs (ID, Name) VALUES (654, 'Song 4')
INSERT INTO @Songs (ID, Name) VALUES (321, 'Song 5')
DECLARE @ShowSongRef TABLE (ID INT, ShowID INT, SongID INT, SongOrder INT)
INSERT INTO @ShowSongRef (ID, ShowID, SongID, SongOrder) VALUES (1, 1, 1, 1)
INSERT INTO @ShowSongRef (ID, ShowID, SongID, SongOrder) VALUES (2, 1, 2, 2)
INSERT INTO @ShowSongRef (ID, ShowID, SongID, SongOrder) VALUES (3, 1, 321, 3)
INSERT INTO @ShowSongRef (ID, ShowID, SongID, SongOrder) VALUES (4, 1, 3, 4)
INSERT INTO @ShowSongRef (ID, ShowID, SongID, SongOrder) VALUES (5, 1546, 3, 1)
INSERT INTO @ShowSongRef (ID, ShowID, SongID, SongOrder) VALUES (6, 1546, 1, 2)
INSERT INTO @ShowSongRef (ID, ShowID, SongID, SongOrder) VALUES (7, 1546, 654, 3)
INSERT INTO @ShowSongRef (ID, ShowID, SongID, SongOrder) VALUES (8, 1546, 321, 4)
SELECT sh.ID
FROM @Songs s
INNER JOIN @ShowSongRef ref ON ref.SongID = s.ID
INNER JOIN @ShowSongRef ref2 ON ref2.SongID = s.ID
AND Ref2.SongOrder = Ref.SongOrder + 1
AND ref.ShowID = ref2.ShowID
INNER JOIN @Shows sh ON sh.ID = ref.ShowID
WHERE ref.SongID IN ('654', '321')
我更新我的問題與一些臨時表來測試。你的建議似乎應該可行,但事實並非如此。 –