[当某些行引用另一行时按计数列出行

问题描述 投票:1回答:1

我正在尝试编写一个查询,该查询将按表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
sql sql-server tsql group-by sql-server-2014
1个回答
0
投票

您可以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
© www.soinside.com 2019 - 2024. All rights reserved.