【发布时间】:2019-02-14 06:00:30
【问题描述】:
我正在尝试获取具有父子关系的表并获取子节点的数量。我想使用COUNT_BIG(*) 创建一个孩子数量的索引视图。
问题在于,在我的索引视图中,我不想消除没有孩子的实体,而是希望 Count 为这些实体为 0。
给定
> Id | Entity | Parent
> -: | :----- | :-----
> 1 | A | null
> 2 | AA | A
> 3 | AB | A
> 4 | ABA | AB
> 5 | ABB | AB
> 6 | AAA | AA
> 7 | AAB | AA
> 8 | AAC | AA
我想创建一个返回的索引视图
> Entity | Count
> :----- | ----:
> A | 2
> AA | 3
> AB | 2
> ABA | 0
> ABB | 0
> AAA | 0
> AAB | 0
> AAC | 0
这是我的 SQL,但使用了 LEFT JOIN 和 CTE(索引视图中都不允许使用)
DROP TABLE IF EXISTS Example CREATE TABLE Example ( Id INT primary key, Entity varchar(50), Parent varchar(50) ) INSERT INTO Example VALUES (1, 'A', NULL) ,(2, 'AA', 'A') ,(3, 'AB','A') ,(4, 'ABA', 'AB') ,(5, 'ABB', 'AB') ,(6, 'AAA', 'AA') ,(7, 'AAB', 'AA') ,(8, 'AAC', 'AA') SELECT * FROM Example ;WITH CTE AS ( SELECT Parent, COUNT(*) as Count FROM dbo.Example GROUP BY Parent ) SELECT e.Entity, COALESCE(Count,0) Count FROM dbo.Example e LEFT JOIN CTE g ON e.Entity = g.Parent GO
【问题讨论】:
标签: sql sql-server tsql common-table-expression indexed-view