我的表格如下所示:
该表列出了这些国家/地区内的国家和地区(州,省,县等)。我需要计算所有国家内所有地区的数量。如您所见,每个地区都有ParentID
,这是您可以在其中找到该地区的国家/地区ID
。
例如,加利福尼亚州在美国,因此其父ID
为1(美国的ID
)。
因此,上面简单表格的结果应为:
美国:2 和 加拿大:1
我尝试了以下内容:
ID
a 1(对于美国)ID
a 3(对于加拿大)Parent ID
为1 Parent ID
为3 上述方法存在的问题是,如果添加新国家/地区,则不会自动生成计数。 有关使这更有活力的想法吗?
答案 0 :(得分:0)
你必须自己加入桌子:
select t1.ID, t1.segment, count(distinct t2.ID)
from yourTable t1
join yourTable t2
on t1.ID = t2.parentID
where t1.parentID is null
group by t1.ID, t1.segment
where子句确保您只显示“顶级”行。
答案 1 :(得分:0)
CREATE TABLE CountriesRegions
(
[ID] [int] NOT NULL,
parentid [int] NULL,
segment [nvarchar](50) NULL)
insert into CountriesRegions values (1,null,'usa'), (2,1, 'california'), (3, null, 'canada'), (4, 3, 'quebec'), (5, 1, 'NY')
select a.id, a.segment, count(*) as [Region Count]
from CountriesRegions a
left join CountriesRegions b
on a.id=b.parentid
where b.id is not null
group by a.id, a.segment
答案 2 :(得分:0)
也许重新格式化数据是有意义的,除了国家和地区的数量之外,还有其他类型的查询。
CREATE TABLE #CountriesRegions
(
[ID] [int] NOT NULL,
parentid [int] NULL,
segment [nvarchar](50) NULL)
insert into #CountriesRegions values (1,null,'usa'), (2,1, 'california'), (3, null, 'canada'), (4, 3, 'quebec'), (5, 1, 'NY')
select * from #CountriesRegions
Create table #Country
([ID] [int] NOT NULL
,[country_name] [nvarchar](50) NOT NULL)
Insert into #Country select ID, segment AS country_name from #CountriesRegions where parentid IS NULL
select * from #Country
Create table #Region
([ID] [int] NOT NULL
,[country_id] [int] NOT NULL
,[region_name] [nvarchar](50) NOT NULL)
Insert into #Region select ID, parentid AS country_ID, segment AS region_name from #CountriesRegions where parentid IS NOT NULL
select * from #Region
Select COUNT(*) As 'Num of Countries' from #Country
Select COUNT(*) As 'Num of Regions' from #Region