我正在尝试编写一个查询,该查询将按表1中引用该表的行数的顺序列出表2中的项。困难之处在于,表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
您可以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