Я пытаюсь написать запрос, который будет перечислять элементы из Таблицы 2 в порядке того, сколько строк ссылаются на него в Таблице 1. Трудность состоит в том, что некоторые строки в Таблице 2 фактически основаны на другой строке в Таблице 2, в в этом случае должна учитываться строка, на которую она ссылается.
Моя структура выглядит следующим образом:
Таблица 1
itemID templateID
1 1
2 2
3 3
4 4
5 5
Таблица 2
templateName templateID basedOnTemplateID
Foo 1 null
Bar 2 null
Tree 3 1
Dog 4 2
Bird 5 null
Желаемые результаты
templateName templateID itemCount
Foo 1 2
Bar 2 2
Bird 5 1
Tree 3 0
Dog 4 0
Что я имею до сих пор:
SELECT TOP (5)
Max(table2.templateName) 'templateName',
Max(table2.templateID) 'templateID',
Count([itemID]) 'itemCount'
FROM table1
LEFT JOIN
table2 on table1.templateid = (
CASE
WHEN table2.basedOnTemplateID is not null
THEN table2.basedOnTemplateID
ELSE table2.templateID
END)
GROUP BY table2.templateid
ORDER BY Count(itemID) DESC