如何实现这种功能[记录统计问题]

coble 2005-07-15 01:45:37
表District:ID[编号],Name[地名]
表Sorts:ID[编号],Name[类名]
表Info:ID[编号],DistID[地区编号],SortID[类名编号],Content[内容]

功能:检索表District中的所有字段时统计在表INFO中所有类别的记录数

实现:(本人想法)

1.用视图和存储过程做数据统计
V_Count "SELECT ID,DistID,SortID FROM [INFO]"

存储过程:sp_count(@DistID,@SortID)返回相应的记录总数

2.建统计表
COUNT ID[编号],DistID[地区编号],SortID[类名编号],CNT[记录数]
实现方法:INFO表插入记录时,对表COUNT做相应的CNT累加。
...全文
97 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
coble 2005-07-15
  • 打赏
  • 举报
回复
SELECT a.ID, @Cnt=b.cnt ---这里出了问题

FROM DJS_Area a RIGHT OUTER JOIN

.......
coble 2005-07-15
  • 打赏
  • 举报
回复
首先谢谢你的帮忙!!

SELECT a.ID, b.cnt AS Cnt
FROM DJS_Area a RIGHT OUTER JOIN
(SELECT DistID, COUNT(ID) AS cnt
FROM info
WHERE sortid = 7[类别变量] AND distid = 5[地区变量]
GROUP BY DistID) b ON a.ID = b.DistID

我改了一下,是这样的效果

我想把这个写成存储过程返回的是 CNT 的值但是有错误
错误提示:
ERR141 向变量赋值的select 语句不能与数据检索操作结合使用。
tx1icenhe 2005-07-15
  • 打赏
  • 举报
回复
select a.ID as DistID,b.id as SortID ,isnull(c.cnt,0) as cnt
from District a cross join Sorts b
left join (
select DistID,SortID,count(*) as cnt
from info
group by DistID,SortID
) as c
on a.ID=c.DistID and b.id=c.SortID
coble 2005-07-15
  • 打赏
  • 举报
回复
SELECT a.ID, ISNULL(b.cnt, 0) AS cnt
FROM DJS_Area a LEFT OUTER JOIN
(SELECT DistID, COUNT(ID) AS cnt
FROM info
WHERE sortid = 6
GROUP BY DistID) b ON a.ID = b.DistID AND a.ID = 1
coble 2005-07-15
  • 打赏
  • 举报
回复
SELECT a.ID, ISNULL(b.cnt, 0) AS cnt

FROM DJS_Area a LEFT OUTER JOIN

(SELECT DistID, COUNT(ID) AS cnt

FROM info

WHERE sortid = [类别编号]--第二个参数

GROUP BY DistID) b ON a.ID = b.DistID

可以实现在对每个地区且在[类别编号]下的记录总数

问如果加一地区条件[地区编号]???

coble 2005-07-15
  • 打赏
  • 举报
回复
SQL 语句是没有问题的

结果如下:

1 1
2 0
3 0
4 0
5 3
但还不是要求的那一种
可能是我还没有表达清楚
功能:检索表District中的所有字段时统计在表INFO中所有类别的记录数

功能:检索表District中的所有字段时统计在表INFO中所有相应类别的记录数
比如:
DISTID SORTID CNT
1 2 1
1 3 2
... ... ...
意思
在地区编号为 1 类别编号是 2 的记录是 1
在地区编号为 1 类别编号是 3 的记录是 2
而DISTID和SORTID是函数参数例:GetRecCount(DISTID,SORTID)返回值是记录总数
tx1icenhe 2005-07-15
  • 打赏
  • 举报
回复
字段看错
select a.ID,isnull(b.cnt,0) as cnt
from District left join (
select DistID,count(distinct SortID) as cnt
from info
group by DistID
) as b
on a.ID=b.DistID

没有测试,可能还有问题
tx1icenhe 2005-07-15
  • 打赏
  • 举报
回复
1、不要建统计表,因为冗余,不好维护(要维护好必须用触发器,效率就成问题)
2、查询:
select a.DistID,isnull(b.cnt,0) as cnt
from District left join (
select DistID,count(distinct SortID) as cnt
from info
group by DistID
) as b
on a.DistID=b.DistID

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧