免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1674 | 回复: 5
打印 上一主题 下一主题

关于存储过程. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-15 17:34 |只看该作者 |倒序浏览
四张表
card /*违章问题记录*/
{
id int 4,
color varchar(10),
Emp varchar(20),
Dep varchar(20)
}

color /*问题级别,红黄白等级别*/
{
id int 4,
name varchar(10)
}

Emp /*人员表*/
{
id int 4,
name varchar(10) /*即 card表中的 Emp*/
}


Dep  /*部门表*/
{
id int 4,
name varchar(10) /*即 card 表中的 Dep */
}

现在想要一个存储过程,返回每个部门所发出的按问题级别分类汇总的违章通知记录条数.

比如列出安全部所发出的红色问题总数,黄色问题总数,白色问题总数.

我现在是在程序中实现的此逻辑,我担心数据量大后会消耗太多的资源,所以请各位老大帮个忙.

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
2 [报告]
发表于 2006-02-15 23:36 |只看该作者
select name,color,count(*) from card,dep where card.dep=dep.name
group by card.dep,card.color
不知道理解的对不对

论坛徽章:
0
3 [报告]
发表于 2006-02-16 09:28 |只看该作者
大致这意思吧,

现在是在card表中有记录的能查出数据汇总数来,但是假如某时间段内某部门并没有发放白色或黄色的问题惩罚通知,怎么让它返回白色或黄色问题返回0值啊?

比如Dep表有有a部门,但a部门并没有发放白色问题通知书,即card表中没有a部门发放的白色问题的记录,但我想要得到是0的汇总值,怎么实现啊?

[ 本帖最后由 alexgro 于 2006-2-16 09:36 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-02-16 09:46 |只看该作者
You better change your database design.

四张表
card /*违章问题记录*/
{
id int 4,
color_id int 4,  -- --> color.id
Emp_id int 4, -- --> Emp.id
Dep_id int 4  -- --> Dep.id
}

color /*问题级别,红黄白等级别*/
{
id int 4,
name varchar(10)
}

Emp /*人员表*/
{
id int 4,
name varchar(10) /*即 card表中的 Emp*/
}


Dep  /*部门表*/
{
id int 4,
name varchar(10) /*即 card 表中的 Dep */
}

现在想要一个存储过程,返回每个部门所发出的按问题级别分类汇总的违章通知记录条数.

select distinct Dep_id,color_id, count(*)
  from card
group by Dep_id,color_id

比如列出安全部所发出的红色问题总数,黄色问题总数,白色问题总数.
create procedure CountColor(
@dept int,
@color int)
as
declare @cnt int
begin
  select @cnt=count(*)
    from card
   where Dep_id = @dept and color_id = @color
end

or you can put the above sql into this proc
我现在是在程序中实现的此逻辑,我担心数据量大后会消耗太多的资源,所以请各位老大帮个忙

论坛徽章:
0
5 [报告]
发表于 2006-02-16 09:59 |只看该作者
谢谢老大,

我的意思是想遍历dep和color表,

如dep表中有a部门b部门c部门等,color表中有红\黄\白颜色,现在想得到card表中a部门所发的红色问题\白色问题\黄色问题(所有color表的记录),如果card表中没有a部门发出的黄色问题通知,就要返回0值.

结果如下:

部门名称      红色问题数    黄色问题数   白色问题数  (将color表中数据遍历)
-----------     --------------      ------------      ------------
A部门           4                    0                   3
B部门            0                   3                    5



怪我文笔太差,描述不清,让楼上兄台误解了.

[ 本帖最后由 alexgro 于 2006-2-16 14:31 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2006-02-16 10:44 |只看该作者
select distinct a.dep_id,b.name, c.name
  from card a,dep b,color c
where a.dep_id=b.id and a.color_id=c.id
and a.card_id=a部门;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP