我的目標是編寫一個查詢,它將返回所有帶有3個標誌字段的類別,如下所示:是否可以在t-sql中對一個組進行子查詢?
ID | En | Ru | Fr
語言標誌必須根據是否與該類別關聯的任何課程記錄爲ON或OFF。
我現在的說法是這樣的:
SELECT c.ID,
(CASE WHEN c.ID IN (SELECT c.ID FROM Lessons AS l WHERE l.Category_Id = c.ID AND l.Language_Id = 1) THEN 1 ELSE 0 END) AS En,
(CASE WHEN c.ID IN (SELECT c.ID FROM Lessons AS l WHERE l.Category_Id = c.ID AND l.Language_Id = 2) THEN 1 ELSE 0 END) AS Ru,
(CASE WHEN c.ID IN (SELECT c.ID FROM Lessons AS l WHERE l.Category_Id = c.ID AND l.Language_Id = 3) THEN 1 ELSE 0 END) AS Fr
FROM LessonCategories AS c
的問題是,這個查詢是很慢的,因爲教訓表有超過60,000的記錄,我跑在它的3倍。
我正在尋找一種方法來提高此查詢的效率。 我曾想過在分類和課程之間使用分組,但我不知道具體如何以及是否有可能。
更多的快速查詢的僞代碼:
SELECT c.[ID],
COUNT(l.Language_Id = 1) > 0 AS En
COUNT(l.Language_Id = 2) > 0 AS Ru
COUNT(l.Language_Id = 3) > 0 AS Fr
FROM CategoryTreeView AS c
INNER JOIN Lessons AS l ON l.Category_Id = c.ID
GROUP BY c.[ID]
它可以表達這種使用有效的T-SQL? 或者是處理這種查詢的更好方法嗎?
P.S.如果有幫助,我不關心得到一個按位標誌字段而不是3個語言字段。
謝謝。
+1,你很可能忽略'CategoryTreeView'表作爲其任何領域都採用 – Andomar
你是對的,我只需要每行的教訓表 –