Список строк по количеству, когда некоторые строки ссылаются на другую строку - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь написать запрос, который будет перечислять элементы из Таблицы 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

1 Ответ

0 голосов
/ 16 апреля 2020

Вы можете left join и агрегировать следующим образом:

select
    t2.templateName,
    t2.templateID,
    count(t1.templateID) itemCount
from table2 t2
left join table1 t1 
    on  t1.templateID = t2.templateID 
    and t2.basedOnTemplateID is null
group by t2.templateName, t2.templateID
order by itemCount desc, t2.templateID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...