表aid 上级id 部门名称
1 0 办公室
2 1 行政科
3 2 卫生室
4 2 门卫
5 4 前门岗
表b
id 得分
3 1
5 2现在想得到的结果是
id 部门 得分
1 办公室 3 (1+2)如何写语句?
1 0 办公室
2 1 行政科
3 2 卫生室
4 2 门卫
5 4 前门岗
表b
id 得分
3 1
5 2现在想得到的结果是
id 部门 得分
1 办公室 3 (1+2)如何写语句?
解决方案 »
- 求一简单的SQL 语句
- 请教一下,多线程插入的问题
- SQLServer2005如何连接数据库文件.mdf,如果不能,怎样将.mdf导入数据库中
- vs2003下使用_RecordSetPtr出现的一个问题
- SQL数据库跨库查询语句怎么写
- 执行重新查询时,怎么定位到第一页?????急急
- SQL SERVER 2008 新建数据库时出现问题。
- 存储过程,取出一个表的数据。另外一个查询语句频繁去匹配前一个表的id找其他值
- 数据库启动过后,马上又停止。提示信息:一些服务自动停止,如果他们没有什么可作的,例如“性能日志和警报服务”
- SQL SERVER2000连接JAVA慢的问题
- 在线求助:类似办公用品申请跟进场景的数据表设计
- SQL SERVER查询条件问题
IF OBJECT_ID(N'表a') IS NOT NULL
DROP TABLE [表a]
GO
CREATE TABLE [表a](id INT,上级id INT,部门名称 VARCHAR(10))
INSERT INTO [表a]
SELECT 1,0,'办公室'
UNION ALL SELECT 2,1, '行政科'
UNION ALL SELECT 3,2,'卫生室'
UNION ALL SELECT 4,2,'门卫'
UNION ALL SELECT 5,4,'前门岗'IF OBJECT_ID(N'表b') IS NOT NULL
DROP TABLE [表b]
GO
CREATE TABLE [表b](id INT,得分 INT)
INSERT INTO [表b]
SELECT 3,1 UNION ALL SELECT 5,2
----------------------------------------------统计----------------------------------------------
DECLARE @id AS INT
SET @id=1 --id为部门名称ID,可以根据统计需要设置
;WITH t AS
(
SELECT id,上级id,部门名称 FROM [表a] WHERE id=@id
UNION ALL
SELECT a.id,a.上级id,a.部门名称 FROM [表a] a
INNER JOIN t b ON a.上级id=b.id
)
SELECT @id AS ID,(SELECT 部门名称 FROM [表a] WHERE id=@id) 部门名称 , sum(得分) 得分 FROM t a,[表b] b WHERE a.id=b.id
/*
ID 部门名称 得分
----------- ---------- -----------
1 办公室 3(1 行受影响)
*/
怎么无法调用?select dbo.functionName()加上架构名架构和角色区别?架构可以看做是数据库内部的逻辑结构,架构下有数据库对象(表,SP,函数,视图)角色就是具体特定权限的组织机构
怎么无法调用?select dbo.functionName()加上架构名架构和角色区别?架构可以看做是数据库内部的逻辑结构,架构下有数据库对象(表,SP,函数,视图)角色就是具体特定权限的组织机构是不是说架构的意思是你可以访问哪些东西?比如简单的说表。
角色的意思是不是说你如何访问这些架构的权限?比如删除,增加。
怎么无法调用?select dbo.functionName()加上架构名架构和角色区别?架构可以看做是数据库内部的逻辑结构,架构下有数据库对象(表,SP,函数,视图)角色就是具体特定权限的组织机构是不是说架构的意思是你可以访问哪些东西?比如简单的说表。
角色的意思是不是说你如何访问这些架构的权限?比如删除,增加。架构是逻辑结构,他包含了很多东西,比如表,视图,函数,存储过程,等等
就好像是一个省,这个省里建立了很多工业园,工厂等等,这些工业园、工厂是归属于这个省的一个对象归属于某个架构,比如一个表,可以属于dbo架构,或者test架构(假如存在test架构的话)
意思是某个对象从属于某个架构角色有一定的权限,比如省长这个角色有任命市长的权限
当A这个人当上省长时,A就具有任命市长的权利了
当B这个人当上省长是,B也有任命市长的权利(谁在这个位置上做,谁就有角色拥有的这个权限)
怎么无法调用?select dbo.functionName()加上架构名架构和角色区别?架构可以看做是数据库内部的逻辑结构,架构下有数据库对象(表,SP,函数,视图)角色就是具体特定权限的组织机构是不是说架构的意思是你可以访问哪些东西?比如简单的说表。
角色的意思是不是说你如何访问这些架构的权限?比如删除,增加。架构是逻辑结构,他包含了很多东西,比如表,视图,函数,存储过程,等等
就好像是一个省,这个省里建立了很多工业园,工厂等等,这些工业园、工厂是归属于这个省的一个对象归属于某个架构,比如一个表,可以属于dbo架构,或者test架构(假如存在test架构的话)
意思是某个对象从属于某个架构角色有一定的权限,比如省长这个角色有任命市长的权限
当A这个人当上省长时,A就具有任命市长的权利了
当B这个人当上省长是,B也有任命市长的权利(谁在这个位置上做,谁就有角色拥有的这个权限)
谢谢。
IF EXISTS ( SELECT *
FROM sysobjects
WHERE xtype IN ( 'FN', 'IF', 'TF' )
AND name = 'Fun_指标分类得分'
)
begin
drop Function Fun_指标分类得分
end
go
CREATE FUNCTION Fun_指标分类得分(@指标序号 int,@员工代码 int )
RETURNS TABLE
AS
RETURN
(
WITH t AS
(
SELECT 指标序号,指标名称,上级指标,指标简码,分数 FROM 绩效管理_考核指标 zja
WHERE 指标序号=@指标序号
UNION ALL
SELECT zjb.指标序号,zjb.指标名称,zjb.上级指标,zjb.指标简码,zjb.分数 FROM 绩效管理_考核指标 zjb
INNER JOIN t b ON zjb.上级指标 =b.指标简码
)
SELECT @指标序号 as 指标序号,
(select 指标名称 from 绩效管理_考核指标 where 指标序号=@指标序号) as 指标名称,
isnull(sum(kkb.次数*a.分数),0) as 得分 FROM t a
inner join 绩效管理_考核列表 kkb on a.指标序号=kkb.指标项
where kkb.被考核人=@员工代码
)
go declare @fl_field nvarchar(4)
declare @计数 int
set @计数=1
declare Temp_Table cursor for
select 指标序号 from 绩效管理_考核指标 where 级数=@级数
open Temp_Table fetch next from Temp_Table into @fl_field
while @@fetch_status = 0
begin
if (@计数<=1)
SELECT * into ##dtbl_绩效_总分_临时表 from Fun_指标分类得分(@fl_field,@员工代码)
else
insert into ##dtbl_绩效_总分_临时表 select * from Fun_指标分类得分(@fl_field,@员工代码)
set @计数=@计数+1
fetch next from Temp_Table into @fl_field
end
select qz.指标序号,ls.指标名称,ls.得分,qz.权重分数 from ##dtbl_绩效_总分_临时表 as ls
inner join 绩效管理_绩效权重 qz on ls.指标序号=qz.指标序号
where 年份=datepart(year,getdate()) and 权重分组=@权重分组
drop table ##dtbl_绩效_总分_临时表
close Temp_Table
deallocate Temp_Table
基本的套路是先做一个表值函数,然后建一个游标,反复调用这个表值函数,再将得到的结果放到一个临时表中,
最后从临时表中得到数据。
得出的经验就是要会用临时表,一味的inner join 之类的来获取数据不可承,
同样的实验数据,一味的inner join得到的结果花了16秒到17秒,
而使用临时表花费不到1秒时间。
SET @id=1
SELECT @id AS ID,(SELECT 部门名称 FROM [表a] WHERE id= @id) 部门名称 ,
sum(得分) 得分
FROM [表a] a,[表b] b
WHERE a.id=b.id
一样结果