高分求一条SQL语句

作者&投稿:舒枫 (若有异议请与网页底部的电邮联系)
高分求一条Mysql数据库 的SQL语句,在线等~

select x.*,s.name from (
select a.*,b.bmt from (select sid,sum(amount) amt from y group by sid) a
left join (select sid,sum(amount) bmt from r group by sid)b
on a.sid=b.sid
where a.amt=b.bmt) x left join s on x.sid=s.id

楼上正解 我看错了 你把它的id 换成你数字列的列名,table 换成你表的名字即可

如果是oracle , 就可以用1个查询语句完成。
用 start with ... connect by 语句。
具体写法是:
select level, branchid , branchname, parentid
from branch
start with branchid = 参数
connect by prior branchid = parentid
这样就可以查询你所给的部门ID以及他的下属所有部门,
将这个结果当作一个表, 用join语句就能实现。
select a.operatorid , a.operatorname, a.branchid ,b.branchname
from operator a , (select level, branchid , branchname, parentid
from branch
start with branchid = 参数
connect by prior branchid = parentid
) b
where a.branchid = b.branchid

如果你要的是ms-sql的话, 据我所知, 是不能用1条查询语句完成的。
你可以用store procedure, 用 游标(cursor)和循环来完成你所给的部门以及下所有属部门的查询,并存放到一个临时表里面。
并用这个结果,再用join语句实现, 这个方法比较麻烦。
当初设计表结构和部门代码结构的时候, 你应该实现想到这样的事情,
多加一个字段来表示他的级别, 或者部门代码采用
1000
1100
1101
1102
1200
1201
1202
这种结构, 那么做起来就不这么麻烦了。

数据库设计有问题,导致现在操作起来很复杂,也不直观,更加影响效率。
如果可以更改数据库结构的话(不能改的话,可以搞张临时表用用),建议在branch表中增加一列LevelCode级次编码(该编码想必可以通过你的branchid处理下得到),编码形式为:
01
0101
0102
010201
01020101
.......
两位一级,这样在搜索父子部门时就可以很容易的使用模糊查询得到想要的所有部门,例如查找0102下的所有子部门,就可以是where like '0102%'。

通过branchid查询
SELECT *
FROM operator
WHERE branchid =&id
OR branchid in (
SELECT branchid FROM branch WHERE parentid= &id);

通过branchname查询
SELECT *
FROM operator
WHERE branchid = (select branchid from branch bname = "name")
OR branchid in (select branchid from branch where parent in (
select branchid from branch where branchname = "name")
)
;

select x.所属部门,y.* from

(select branchid,branchname,(select branchname from branch where branchid=a.parentid) 所属部门 from branch a where parentid is not null) x,
operator y

where x.branchid=y.branchid;

select operator.*, branch.parentid from operator ,branch
where operator.branchid in
(
select a.branchid from branch a,branch b
where a.branchid = b.parentid
);

这就是具体答案啊
create table branch
( branchid int ,
branchname varchar(40),
parentid int )
create table operator
( operatorid int ,
operatorname varchar(50),
branchid int )
insert into branch values(1,'a',null)
insert into branch values(2,'b',1)
insert into branch values(3,'c',2)
insert into branch values(4,'d',null)

insert into operator values(1,'lili',1)
insert into operator values(2,'zhuzhu',2)
insert into operator values(3,'haoyu',3)
insert into operator values(4,'liumei',4)

create table #tmp
( branchid int
)
insert into #tmp select branchid from branch where branchname = 'a'

declare @p_b_id int
set @p_b_id = (select * from #tmp)
declare @s_id int
set @s_id = (select branchid from branch where parentid = @p_b_id)
while (@s_id is not null)
begin
insert into #tmp values(@s_id)
set @p_b_id = @s_id
set @s_id = (select branchid from branch where parentid = @p_b_id)
end

select * from operator where branchid in (select * from #tmp)

根据 你的意思 我自己插入了几个数据 完整代码如上。你自己做的时候 根据自己原始表 来确定临时表的字段类型。把insert into #tmp select branchid from branch where branchname = 'a' 这句中的‘a’改成 你要找的部门名字。
declare @p_b_id int
set @p_b_id = (select * from #tmp)
declare @s_id int
set @s_id = (select branchid from branch where parentid = @p_b_id)
while (@s_id is not null)
begin
insert into #tmp values(@s_id)
set @p_b_id = @s_id
set @s_id = (select branchid from branch where parentid = @p_b_id)
end
这一段 要一起执行 不能分开执行

怎么写下面这条sql的语句,新学的没有答案,请高手帮忙解决
答:1.update 选课 set 成绩=成绩+5 where 课程号 in (select 课程号 from 课程 where 课程名="数据库"2.update 选课 set 成绩=0 where 课程号="2"3.update 选课 set 成绩=85 where 学号 in (select 学号 from 学生 where 姓名="李勇"4.delete from 选课 where 课程号="2" and 成绩 is ...

高分!!!求一个SQL语句写触发器的方法.!!!
答:说明下参数,trigger_name:你的触发器名称,[table]要建触发器的表,[update,insert,delete] 在哪种情况下触发,可以全部选择表示增、删,改都会触发。我相信插入语句你都会,所以不写了,希望能帮到你 create trigger tr_Notice on Notice for insert begin insert into needNotice values(1,2);ins...

sql简单查询语句
答:1、首先打开数据库,建立好表。2、然后查询全体教师的教师号、姓名、职称,并分别为三列指定别名:教师号、姓名、职称,如下图所示。3、查询结果如下图所示。4、接着查询所有姓张的学生的学号和姓名,如下图所示。5、最后查询选修C1(高等数学)且成绩高于85分的学生的学号、课程号和成绩,如下图所示...

几个sql 2005 查询语句 麻烦高手帮做下
答:1、查询“001”课程比“002”课程成绩高的所有学生的学号;SELECT t1.SID FROM (SELECT Sid, Score FROM SC WHERE cid = '001') t1 (SELECT Sid, Score FROM SC WHERE cid = '002') t2 WHERE t1.sid = t2.sid AND score > t2.score 2、查询平均成绩大于60分的同学的学号和平均成绩;...

高分求sql 查找多次记录中小于某个时间的最后记录
答:select *from tb awhere 1=1and a.time <= `2012-11-18 13:00:00`and not exists ( select 1 from tb b where 1=1 and b.time <= `2012-11-18 13:00:00` and b.pid = a.pid and b.time > a.time)...

高分求高手一个asp+mssql的查询语句如何写
答:http://zhidao.baidu.com/question/24265895.html 我不会一个SQL语句的 select distinct(名字) 名字 from abcd 先这样 然后 一次循环 select count(*) from abcd where 名字=rs("名字")以下是数据是我的测试数据,你可以参考以下:qq: 471600163 mysql> select * from test;+---+---+ | id ...

求日周月报表SQL语句~~~
答:周报:select count(ID) from 问题表 where 所属作业ID = (select ID from 作业表 where 作业名称='你输入的作业名称') and createtime between #星期一的日期# and #星期天的日期 周报:select count(ID) from 问题表 where 所属作业ID = (select ID from 作业表 where 作业名称='你输入的...

1 设计一个SQL语句,显示学生表中年龄最大的学生的姓名、性别和出生日...
答:1.select 姓名,性别,出生日期 from 学生表 where 出生日期=(select max(出生日期) from 学生表)2.select 学号,课程编号,考试成绩 from 成绩表 a where 考试成绩= (select max(考试成绩) from 成绩表 b where b.学号=a.学号 and b.课程编号=a.课程编号)...

高分求助SQL语句写法(t表中一字段中内容如:a,b,c,d。如何分别取出各值...
答:这个要用自定义函数了 比如象你的就是select split(字段名,',',0) as 字段1,split(字段名,',',1) as 字段2 ...CREATE FUNCTION [dbo].[split](@str nvarchar(4000),@code varchar(10),@no int )RETURNS varchar(200)AS BEGIN declare @intLen int declare @count int declare @indexb...

SQL语句 查询 统计
答:1.select * from 学生表 2.select 学号,姓名,年龄 from 学生表 3.select 学号,姓名,年龄 from 学生表 where 年龄 between 18 and 20 and 系别=‘IS’4.select 学号,姓名,年龄 from 学生表 where 姓名 like '李%' or 姓名 like '李%'5 select distinct 学号 from 学生表 where 成绩 <60 ...