① 单表比较复杂的查询 高分求sql
select * from 表 a,(
select count(1),name from (select distinct name,date from 表where 两者之间的时间) b group by name having count(1)=(日期差值))
where a.name=b.name
搞定
不太懂你的说明,我QQ就是我名字,QQ上说吧
② 怎么从一段复杂的SQL中把所有的表都取出来
说个思路:
表名的前面一般是 from +空格 ,from + 回车, 所以先定位from ,然后去掉前面的空格或回车,后面一般是空格或者回车,所以第二步就是从剩下的字符串中取到空格或回车,这样应该就能取得表名了,如果有多个表就再去判断','。当然还要判断left join ,join , right join ,所有的表名就循环取了。
③ SQL 单表复杂查询问题
SELECT NAame,
Case
WHEN FirstGrade = 'weikao' THEN 'weikao'
WHEN FirstGrade = 'hege' THEN 'HEGE'
WHEN FirstGrade = 'buhege' THEN SecondGrade
END AS Grade
CASE
WHEN FirstGrade = 'weikao' THEN NULL
WHEN FirstGrade = 'hege' THEN FirstTime
WHEN FirstGrade = 'buhege' AND SecondGrade = 'hege' THEN SecondTime
ELSE NULL
END AS [Time]
FROM ACHV
结构如上所示,FirstGrade为初考成绩 , SecondGrade为补考成绩 Grade为最终需求的成绩
同理,FirstTime为初考时间,SecondTime为补考时间,Time为最终需求时间。
④ SQL语句高手进,关于一个比较复杂的存储过程
题目所述功能要求,可以用一句SQL语句实现,当然如果要传递一些参数地滤的话还是需要存储过程.
语句思路:
1.按dwbh,时间汇总个人表中金额
2.按dwbh,时间汇总单位表中金额
3.将以上两个汇总结果进行关联,关联的条件是相同dwbh、相同时间情况下金额不同的记录.即可以实现金额不相同的数据筛选出来.
"--"符号为注解,以下语句中的中文字段为假想字段,可以替换为实际字段.关键在于理解语句思路.语句如下:
select
GR.dwbh
,
GR.个人表交费时间
as
时间,GR.个人交费总金额,DW.单位交费总金额,(GR.个人交费总金额
-
DW.单位交费总金额)
as
差额
from
(
select
dwbh,个人表交费时间,sum(交费金额)
as
个人交费总金额
--子查询汇总出个人交费表中的单位、时间、金额,并取别名为GR嵌入From子句中
from
bcd
group
by
dwbh,交费时间
)
as
GR
inner
join
--
将上下两个子查询进行内联
(
select
dwbh,单位表交费时间,sum(交费金额)
as
单位交费总金额
--子查询汇总出单位交费表中的单位、时间、金额,并取别名为DW嵌入From子句中
from
abc
groub
by
dwbh,交费时间
)
as
DW
on
GR.dwbh
=
DW.dwbh
and
GR.个人表交费时间
=
DW.单位表交费时间
and
GR.个人交费总金额
<>
DW.单位交费总金额
--两个子查询内联的条件是单位编号相同,时间相同,但金额不同的记录
⑤ 比较复杂的sql语句
如果你的是ACCESS数据库或者MS SQL数据库,可以使用视图来实现,做起来很容易的。你可以试一下。
以下介绍主要方法:
INNER JOIN 运算
组合两个表中的记录,只要在公共字段之中有相符的值。
语法
FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2
INNER JOIN 运算可分为以下几个部分:
部分 说明
table1, table2 记录被组合的表的名称。
field1, field2 被联接的字段的名称。若它们不是由数字构成的,则这些字段必须为相同的数据类型并包含同类数据,但它们无须具有相同的名称。
compopr 任何的关系比较运算子:"=," "<," ">," "<=," ">=," 或 "<>."
说明
可以在 FROM 子句中使用INNER JOIN运算。.这是最普通的联接类型。只要在这两个表的公共字段之中有相符值,内部联接将组合两个表中的记录。
可以使用 INNER JOIN 与部门表及员工表选择每一个部门中的全部员工。反之,可以使用 LEFT JOIN或 RIGHT JOIN运算创建 outer join,从而选择所有部门(即使有些并没有员工)或所有员工(即使有些尚未分配到部门)。
若试图联接包含 Memo或 OLE Object数据的字段,会导致错误。
可以联接任何两个相同类型的数值字段。例如,可以联接 AutoNumber和 Long字段,因为它们类型相似。但不能联接 Single 和 Double 类型的字段。
下列示例显示如何在类标识符字段联接类表及产品表:
SELECT CategoryName, ProctName
FROM Categories INNER JOIN Procts
ON Categories.CategoryID = Procts.CategoryID;
在上面的示例中,类标识符是已被联接的字段,但是它并不包含在查询输出中,因它并非被包含在 SELECT 语句之中。在这个示例中,若要包含联接字段,将字段名包含在 SELECT 语句中, Categories.CategoryID.
也可以使用下列语法,在一个 JOIN 语句中链接多个 ON 子句:
SELECT fields
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field1 AND
ON table1.field2 compopr table2.field2) OR
ON table1.field3 compopr table2.field3)];
也可以使用下列语法,嵌套 JOIN 语句:
SELECT fields
FROM table1 INNER JOIN
(table2 INNER JOIN [( ]table3
[INNER JOIN [( ]tablex [INNER JOIN ...)]
ON table3.field3 compopr tablex.fieldx)]
ON table2.field2 compopr table3.field3)
ON table1.field1 compopr table2.field2;
在一个 INNER JOIN 之中,可以嵌套 LEFT JOIN 或 RIGHT JOIN,但是在 LEFT JOIN 或 RIGHT JOIN 中不能嵌套 INNER JOIN。
⑥ sql表的字段太多,更新表的时候,sql语句写起来很复杂,如何解决这个问题
在系统表中查一下待更新的表的字段信息,如果是SQLServer用syscolumns表,如果是DB2用syscat.columns表,如果是Oracle请使用all_tab_columns。
查出来之后将这些字段复制到EXCEL,用一个公式生成你要的更新语句,例如="sql=sql & " & A2 & " = '" & B2 & "'" ,最后将公式生成的结果复制到你的代码中,再稍微改一改就OK了
⑦ 一个极其复杂的sql语句
我没有你的表结构,我只给你说一下思想.首先你有五个表,get(order_id,id),account(type_id,money),travel(order_id,money),finance(ord_id,money),tourise(id)
有一个问题你没有说清楚,你要的是两者比较大于的记录还是小于的记录.
下面是你要的SQL语句,你写的和什么以及什么都搞乱了!一定要把你的话写清楚我才能帮你解决:
select get.order_id,sum(account.money),sum(travel.money)
from get inner join account on get.id=account.type_id
inner join travel on get.order_id=travel.order_id
inner join finance on get.order_id=finance.order_id
inner join tourist on get.order_id=tourist.id
where sum(account.money)>sum(travel.money)
group by get.order_id
因为我没有你的表结构,你只要看着我的捎改一下就行了!其实并不难,并且你叙述的内容也不是很清楚.