回复人: wwl1981(小刀) ( ) 信誉:105 2003-3-21 16:04:18 得分:0
是那个家伙对数据下了手脚^_^
create table IKnowYou
(userid varchar(30),
TableName varchar(50),
Action varchar(6),
DateT datatime,
TrrigerTableColumns.....,
TrrigerTableColumns.....)
create trriger Who_Do_It on table
for update
as
declare userid varchar(30)
declare TableName varchar(50)
declare Action varchar(6)
userid=@@suser_sname
Action='update'
TableName='tabel'
insert into IKnowYou values(userid,TableName,Action,Now,select * from deleted,select * from inserted)
Top
回复人: csdntoll(低调惯了) ( ) 信誉:147 2003-3-21 17:06:52 得分:0
kill all connections to a given databse
CREATE PROCEDURE usp_killDBConnections @DBName varchar(50), @withmsg bit=1
AS
SET NOCOUNT ON
DECLARE @spidstr varchar(8000)
DECLARE @ConnKilled smallint
SET @ConnKilled=0
SET @spidstr = ''
IF db_id(@DBName) < 4
BEGIN
PRINT 'Connections to system databases cannot be killed'
RETURN
END
SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; '
FROM master..sysprocesses WHERE dbid=db_id(@DBName)
IF LEN(@spidstr) > 0
BEGIN
EXEC(@spidstr)
SELECT @ConnKilled = COUNT(1)
FROM master..sysprocesses WHERE dbid=db_id(@DBName)
END
IF @withmsg =1
PRINT CONVERT(VARCHAR(10), @ConnKilled) + ' Connection(s) killed for DB ' + @DBName
GO
Top
回复人: matq2008(叶子.net) ( ) 信誉:100 2003-3-21 18:00:47 得分:0
SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
FROM TABLE1,
(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
FROM TABLE2
WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,
(SELECT NUM, UPD_DATE, STOCK_ONHAND
FROM TABLE2
WHERE TO_CHAR(UPD_DATE,'YYYY/MM') =
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') ¦¦ '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y,
WHERE X.NUM = Y.NUM (+)
AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
WHERE A.NUM = B.NUM
Top
回复人: cnuninet(www.helloaspx.com) ( ) 信誉:100 2003-3-21 18:26:32 得分:0
SELECT * FROM table ORDER BY id
SELECT * FROM table ORDER BY id DESC
正反排序,厉害吧!
Top
回复人: cnuninet(www.helloaspx.com) ( ) 信誉:100 2003-3-21 18:26:54 得分:0
还有,一次选出表中的所有内容:
SELECT * FROM table
Top
回复人: learnner( ) ( ) 信誉:110 2003-3-21 18:42:16 得分:0
mark
Top
回复人: csdntoll(低调惯了) ( ) 信誉:147 2003-3-21 18:42:41 得分:0
楼上的哥们,厉害!^_^
Top
回复人: csdntoll(低调惯了) ( ) 信誉:147 2003-3-21 18:45:07 得分:0
不是说你,是说: cnuninet(www.helloaspx.com) ,呵呵
Top
回复人: miqier1209(米琪儿) ( ) 信誉:100 2003-3-21 22:58:39 得分:0
select * into b from a where 1<>1
这样生成的b表访问的用户没有select的权限?
请问sql DX们这个问题怎么解决?
Top
回复人: whcasp(money is best~) ( ) 信誉:105 2003-3-22 9:25:25 得分:0
厉害
Top
回复人: csdntoll(低调惯了) ( ) 信誉:147 2003-3-22 10:09:48 得分:0
Select left(field,1) as field1 from table_name order by field desc
Top
回复人: ministrybill(生命的烙印) ( ) 信誉:120 2003-3-22 10:23:58 得分:0
唉,好像称不上经典
大家来捧捧场:http://expert.csdn.net/Expert/topic/1545/1545418.xml?temp=.6732141
Top
回复人: legend9(legend) ( ) 信誉:100 2003-3-22 11:13:44 得分:0
select count(clubmember.clubid)as hot,clubmember.clubid,clubinfo.clubid,clubinfo.name from clubmember,clubinfo where clubinfo.clubid=clubmember.clubid group by clubmember.clubid order by hot DESC limit 10
Top
回复人: waterfall_cp(鸟鸟) ( ) 信誉:98 2003-3-22 11:36:37 得分:0
条件删除
DELETE DBO.TEMP WHERE FLD_CHARACTER IN
(
SELECT FLD_CHARACTER
FROM dbo.TBL_CHARACTER
WHERE (FLD_DELETED = 1) AND (FLD_LEVEL <= 18) AND
(FLD_UPDATEDATETIME <= GETDATE() - 5)
)
Top
回复人: georgechen(小雨点) ( ) 信誉:100 2003-3-22 15:39:49 得分:0
选择前数据库里前10条记录:
1、select top 10 * from table
2、set rowcount 10
select * from table
Top
回复人: dh20156(风之石-ASP.net学习中) ( ) 信誉:5 2003-3-22 16:13:21 得分:0
今天才把合计函数搞定:
Set rs=conn.execute("Select min(id) as minID from TABLE") ^_^
Top
回复人: boy21cnthp(娃娃) ( ) 信誉:99 2003-3-22 17:06:00 得分:0
高手
Top
回复人: honghaier(红孩儿) ( ) 信誉:100 2003-3-22 18:23:01 得分:0
select SQL高手 from 本版发贴者
Where 得分>0
Top
回复人: sevenhzheleven(水冰) ( ) 信誉:100 2003-3-24 1:54:26 得分:0
哇,,,,高手,你们是工作的时候学的,还是读书的时候开始学的?请教
Top
回复人: ljupin(无情刀) ( ) 信誉:106 2003-3-24 2:09:57 得分:0
select * form *
会执行吗
Top
回复人: dawooo(大宇) ( ) 信誉:100 2003-3-24 8:15:58 得分:0
大宇阅览
Top
回复人: wfnuser(夏雪) ( ) 信誉:103 2003-3-24 8:52:17 得分:5
select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
日程安排提前五分钟提醒。
Top
回复人: yonghengdizhen(刹那←→永恒) ( ) 信誉:112 2003-3-24 9:52:31 得分:0
to miqier1209(米琪儿) ( ) 信誉:100 2003-03-21 22:58:00 得分:0
select * into b from a where 1<>1
这样生成的b表访问的用户没有select的权限?
请问sql DX们这个问题怎么解决?
指定dbo前缀应该可以解决问题了..
Top
回复人: accp258(男人背后的女人) ( ) 信誉:101 2003-3-24 11:17:19 得分:0
mark!
Top
回复人: suasalito(妈的,什么血这么难喝,喝可乐去) ( ) 信誉:100 2003-3-24 11:19:59 得分:0
同学们回答的都不错,恩,值得表扬
Top
回复人: hotel9545(清风剑客) ( ) 信誉:100 2003-3-24 12:10:38 得分:0
复制一张表
create table aaa as select * from bbb;
Top
回复人: fenlin(千里之行,始于足下......) ( ) 信誉:110 2003-3-24 12:21:33 得分:0
我也来凑热闹,呵呵......
<%
'取出随机记录
Randomize
RNumber = Int(Rnd*200) + 1
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
%>
Top
回复人: linens(存储过程) ( ) 信誉:100 2003-3-24 13:33:10 得分:0
上面的人把视图都搬出来了啊不过几乎都是查询,我来点实用的
insert into pbrule(newrid,subj,bz,zf,orid,rstat,layer,bid) select newrid,subj,bz,zf,orid,rstat,layer,bid from pbrule1 where bruleid=bruleid
将pbrule1 表中符合条件的记录 导入 pbrule表中
Top
回复人: linens(存储过程) ( ) 信誉:100 2003-3-24 13:38:49 得分:0
下面这个更实用,就是两张关联表,删除主表中已经在副表中没有的信息
delete from info where not exists ( select * from infobz where info.infid=infobz.infid )
这条语句就是删除 INFO表中infid字段在infobz中不存在的记录
此语句用来维护数据库很有用哦。
楼主给点分吧
Top
回复人: qigang_liu(云山云海) ( ) 信誉:100 2003-3-24 15:19:57 得分:5
CREATE OR REPLACE PROCEDURE DUMP_TO_WEB_TCLHD_SP_OBJ
AS
BEGIN
CALC_PIA_PRICE ;
DELETE FROM TCLHD_SP_OBJ ;
INSERT INTO TCLHD_SP_OBJ (NAME,CODE,ID,PRICE,TYPE,FIELDS) (
SELECT c.DESCRIPTION,C.SEGMENT1,a.INVENTORY_ITEM_ID, nvl(c.ATTRIBUTE14,'0'),0,nvl(c.ATTRIBUTE13,0)
from mtl_item_categories a , mtl_categories b , mtl_system_items c
where a.CATEGORY_ID = b.CATEGORY_ID and b.SEGMENT1='原材料'
and a.INVENTORY_ITEM_ID = c.INVENTORY_ITEM_ID AND A.ORGANIZATION_ID = 21
and c.ORGANIZATION_ID = 21 and c.inventory_item_status_code = 'Active' );
COMMIT ;
END ;
Top
回复人: wnhoo(e梦缘) ( ) 信誉:115 2003-3-24 15:38:58 得分:0
数据库IBM DB2 》》》SQL
绝对精华
select dmbh,SJDM,flsm,dmzz from ydm where dmbh=3300
union all
select dmbh,SJDM,flsm,dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh=3300)
union all
select dmbh,SJDM,flsm,dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in (
select dmzz from ydm where dmbh=3300))
union all
select dmbh,SJDM,flsm,dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in (
select dmzz from ydm where dmbh=3300)))
union all
select dmbh,SJDM,flsm,dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in (
select dmzz from ydm where dmbh=3300))))
**********************************
select SJDM from ydm where dmbh=3300
union all
select SJDM from ydm where dmbh in
(select dmzz from ydm where dmbh=3300)
union all
select SJDM from ydm where dmbh in
(select dmzz from ydm where dmbh in (
select dmzz from ydm where dmbh=3300))
union all
select SJDM from ydm where dmbh in
(select dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in (
select dmzz from ydm where dmbh=3300)))
union all
select SJDM from ydm where dmbh in
(select dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in
(select dmzz from ydm where dmbh in (
select dmzz from ydm where dmbh=3300))))
**************************************************
SELECT COUNT(*) as yhs ,SUM(DF) as df FROM DB2.DFTDF
WHERE (year(rq)*12+month(rq)) between 24015 and 24015
AND dflb=513
and (ZHH,YYH) IN
(SELECT ZHH,YYxH FROM DB2.YDD111 WHERE HYM in
( select SJDM from DB2.ydm where dmbh=3200
union all
select SJDM from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh=3200)
union all
select SJDM from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh=3200))
union all
select SJDM from DB2.ydm where dmbh in (
Select dmzz from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh=3200)))
union all
select SJDM from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh in (
select dmzz from DB2.ydm where dmbh=3200))))
))
***********************************************
select bcm,bsm,count(bsm) as sl
from (
select bcm,case
when blx='DXB' and bxh like 'DD%' AND BXH NOT LIKE 'DDS%'
then 'JJB'
else 'DZB'
end as bsm
from jldb) as jldb2
group by bcm,bsm
select bcm,bsm,count(bsm) as sl
from (
select bcm,case
when blx='DXB' and bxh like 'DD%' AND BXH NOT LIKE 'DDS%'
then 'JJB'
else 'DZB'
end as bsm
from jldb
where bzt='OK' and qyrq between '1999-1-1' and '2003-1-3' ) as jldb2
group by bcm,bsm
****************
select bcm,bsm,bxh,count(bsm) as sl
from (
select bcm,case
when blx='DXB' and bxh like 'DD%' AND BXH NOT LIKE 'DDS%'
then 'JJB'
else 'DZB'
end as bsm,bxh
from jldb
where bzt='OK' and qyrq between '1999-1-1' and '2003-1-3' ) as jldb2
group by bcm,bxh,bsm
**********************************************
with ttt as (select bcm,bxh,bsm,count(bsm) as sl from (select bcm,bxh,case when blx='DXB' and bxh like 'DD%' AND BXH NOT LIKE 'DDS%' then '机械表' else 'DZB' end
as bsm from jldb where bzt='OK' and qyrq<='2002-2-2' ) as jldb2 group by bcm,bxh,bsm),
sss as (select bcm,bxh,bsm,count(bsm) as sl1 from (select bcm,bxh,case when blx='DXB' and bxh like 'DD%' AND BXH NOT LIKE 'DDS%' then '机械表' else 'DZB' end
as bsm from jldb where bzt='OK' and qyrq<='2000-1-1' ) as jldb2 group by bcm,bxh,bsm)
select ttt.bcm,ttt.bxh,ttt.bsm,value(ttt.sl,0) as sl1,value(sss.sl1,0) as sl2,(value(ttt.sl,0)-value(sss.sl1,0)) as sl3 from ttt full join sss
on sss.bxh=ttt.bxh and sss.bcm=ttt.bcm and sss.bsm=ttt.bsm order by ttt.bcm,ttt.bxh,ttt.bsm
Top
回复人: guzh() ( ) 信誉:100 2003-3-24 17:45:41 得分:0
看了
Top
回复人: realljx(至尊十三少) ( ) 信誉:102 2003-3-24 18:52:15 得分:0
好长
Top
回复人: shawshanke(我随风而来,随风而去) ( ) 信誉:100 2003-3-24 19:44:53 得分:0
恭喜此帖突破100大观!
--------------------------------------------------
我随风而来,又随风而去!
Top
回复人: cep50(cep50) ( ) 信誉:100 2003-3-24 20:30:58 得分:0
上当了,该软件没什么用。是在骗取别人的智慧,还要收人家的人民币。
Top
回复人: eafin(e峰.Net)(一叶枫舟) ( ) 信誉:115 2003-3-24 21:00:38 得分:0
收藏啦!
希望谁能把这些整理一下。然后我再收藏,呵呵
Top
回复人: rolandzhang() ( ) 信誉:103 2003-3-24 21:22:06 得分:0
wenhao676能否加些注释?我菜一点。
Top
回复人: coffee_black(黑咖啡) ( ) 信誉:100 2003-3-25 0:07:54 得分:0
是好贴!!
Top
回复人: zhw_yihui(卜卢特) ( ) 信誉:94 2003-3-25 8:34:10 得分:0
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
选择在每一组b值相同的数据中对应的a最大的(换成average或别的函数或子查询,你会有意想不到的发现)记录的所有信息.
类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.
上面的许多同志对子查询存在有偏见与误解,其实在一个好的数据分析程序中,子查询可以简化很多程序逻辑.
Top
回复人: gage(蓝宝石) ( ) 信誉:100 2003-3-25 11:17:11 得分:0
收藏
Top
回复人: fvsl(楚龙) ( ) 信誉:98 2003-3-25 13:09:51 得分:0
我收藏:)
Top
回复人: zhusuhao(不以为然) ( ) 信誉:101 2003-3-25 13:51:32 得分:0
藏
Top
回复人: fule(孤魂野鬼) ( ) 信誉:100 2003-3-25 13:59:59 得分:0
藏
Top
回复人: 98130(Oracle) ( ) 信誉:100 2003-3-25 14:33:53 得分:0
回复人: fenlin(千里之行,始于足下......) ( ) 信誉:100 2003-03-24 12:21:00 得分:0
我也来凑热闹,呵呵......
<%
'取出随机记录
Randomize
RNumber = Int(Rnd*200) + 1
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
%>
这种方法存在bug,有可能取不出数据来,
最好还是还
select top 1 * from tablename order by newid()
Top
回复人: hisi(海山) ( ) 信誉:100 2003-3-25 16:05:23 得分:0
收藏...
Top
回复人: lyexcel(冰上飞人) ( ) 信誉:100 2003-3-25 16:36:58 得分:0
select * from
(select top 5 * from
(select * from
(select top 5 *
from GuestBook
where 1=1 and Deleted = false
order by GuestID desc)
order by GuestID asc)
order by GuestID asc)
order by GuestID desc
Top
回复人: yonghengdizhen(刹那←→永恒) ( ) 信誉:112 2003-3-25 18:37:44 得分:0
select * from
(select top 5 * from
(select * from
(select top 5 *
from GuestBook
where 1=1 and Deleted = false
order by GuestID desc)
order by GuestID asc)
order by GuestID asc)
order by GuestID desc
这可是一个经典的SQL.
大概再加几层嵌套,查询引擎都可以崩溃了..
Top
回复人: csdntoll(低调惯了) ( ) 信誉:147 2003-3-26 9:49:49 得分:0
昨天刚写的:
update picture set IsUse='1' where instr(PicPath,'_1')>0
Top
回复人: yonghengdizhen(刹那←→永恒) ( ) 信誉:112 2003-3-26 11:53:51 得分:0
下面的语句不是精华.但是却是用很多用T-SQL进行开发的同志所不了解的..
如何更新nText,Text,Image字段数据..
DECLARE @ptrval binary(16)
SELECT @ptrval = TEXTPTR(LSD_Comment)
FROM Legal_Dispute WHERE LD_Record_No=25 --得到指定记录的nText文本指针
UPDATETEXT Legal_Dispute.LSD_Comment @ptrval 0 0 N'Insert Text Content Into Old Content Before' ---将数据插入在老数据之前.
很多同志在更新nText字段的时候使用一个记录集取回ASP然后一次性用"UPDATE set fieldname='" & new content & old content & "'"的方式实现..
却不知道,sql string一次只能提交的string是有限制的,这样一来,实际的text,ntext永远也不可能存储它所支持的最大长度的数据..也远远不能达到使用nText字段的目的了..
Top
回复人: jtmoon(逍遥小贼) ( ) 信誉:234 2003-3-26 12:50:27 得分:0
呵呵,不错啊,收藏
Top
回复人: csdntoll(低调惯了) ( ) 信誉:147 2003-3-26 17:49:24 得分:0
有好料快点贴,不久要揭贴喽!
Top
回复人: chinahuman(枯) ( ) 信誉:105 2003-3-26 19:36:33 得分:0
高手们来看一看这个问题了http://expert.csdn.net/Expert/topic/1580/1580778.xml?temp=5.489528E-03
在线等了!
Top
回复人: yonghengdizhen(刹那←→永恒) ( ) 信誉:112 2003-3-26 21:12:14 得分:0
to 上面的兄弟
SELECT * INTO [D:\database.mdb].table4 FROM [C:\database.mdb].table1
前提是ASP用户对后者有读权限.
前者有写权限
Top
回复人: guiguai(鬼怪) ( ) 信誉:101 2003-3-26 22:09:06 得分:0
收藏!
Top
回复人: wertou() ( ) 信誉:100 2003-3-27 10:55:30 得分:0
select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源地,高考总成绩
Top
回复人: Swanzy(志远) ( ) 信誉:100 2003-3-27 11:57:47 得分:0
请问查询时时有两行相同的记录,如何去掉一行?(其中包含TEXT数据类型)
select brepeople,姓名,bbs_content.* from bbs_revert,bbs_content,bbs_userinfo where bauthor=职员id and brepeople='m043' and bbs_content.id=bid
显示“我”参加的主题回复时,如果本主题回复了两次以上,那查询的结果将有两行以上的记录。
Top
回复人: huangang(H.G) ( ) 信誉:100 2003-3-27 12:08:42 得分:0
select * form a like %keywords%
模糊查询
Top
回复人: yonghengdizhen(刹那←→永恒) ( ) 信誉:112 2003-3-27 12:20:43 得分:0
to Swanzy(志远)
包含有text类型数据是无法进行消除重复值处理的..
因为在sql server中text处理为一个指针..
读取并比较该字段需要专用的语法
如果要做,建议在存储过程中做或将该字段排除在比较条件外
Top
回复人: 98130(Oracle) ( ) 信誉:100 2003-3-27 12:41:06 得分:0
select * from
(select top 5 * from
(select * from
(select top 5 *
from GuestBook
where 1=1 and Deleted = false
order by GuestID desc)
order by GuestID asc)
order by GuestID asc)
order by GuestID desc
我怎么运行不了?
Top
回复人: yonghengdizhen(刹那←→永恒) ( ) 信誉:112 2003-3-27 14:18:27 得分:0
to 98130(Oracle)
下面的可以.但是好象看起来很没有必要
select top 1 num1 from
(select top 5 num1 from
(select top 1 num1 from
(select top 5 num1
from table1
order by num1 desc) as a
order by num1 asc) as b
order by num1 asc) as c
order by num1 desc
Top
回复人: tigerflyfly(小飞虎) ( ) 信誉:100 2003-3-27 21:20:40 得分:0
取出最先的是select top * from tablename
取出最后的几条是什么?
Top
回复人: clipper_clipper(clipper_clipper) ( ) 信誉:104 2003-3-27 21:46:59 得分:0
select count(*) from tb_tablename
经常用的,取记录数
Top
回复人: csdntoll(低调惯了) ( ) 信誉:147 2003-3-28 9:26:47 得分:0
t tigerflyfly(小飞虎)
还是用select top,只是排序倒过来即可,比如:
select top 10 * from tablename order by id desc
Top
回复人: entice(踏雪寻梅) ( ) 信誉:106 2003-3-28 9:27:16 得分:0
to tigerflyfly(小飞虎)
用排序呀。
Top
回复人: xiaojiyi(小己乙) ( ) 信誉:100 2003-3-28 11:15:44 得分:0
分页语句
select top 100 * from 表名 where id not in (select top page_no*100 * from 表名)
page_no是程序中的变量
Top
回复人: xiaoshi(js真痛苦!我要被炒了) ( ) 信誉:101 2003-3-28 11:42:47 得分:0
我收藏
中午来看
Top
回复人: alu_ok(冬瓜茶) ( ) 信誉:100 2003-3-28 13:16:31 得分:0
从数据库直接输出XML数据:
select text1,text2 from table1 where text1 like '%alu_ok%' for xml auto
Top
回复人: alu_ok(冬瓜茶) ( ) 信誉:100 2003-3-28 13:19:12 得分:0
UPDATE titles
SET t.ytd_sales = t.ytd_sales + s.qty
FROM titles t, sales s
WHERE t.title_id = s.title_id
AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)
Top
回复人: PeterMCT(天天下雨1991) ( ) 信誉:101 2003-3-28 13:21:02 得分:0
up
Top
回复人: alu_ok(冬瓜茶) ( ) 信誉:100 2003-3-28 13:21:07 得分:0
DELETE authors
FROM (SELECT TOP 10 * FROM authors) AS t1
WHERE authors.au_id = t1.au_id
Top
回复人: alu_ok(冬瓜茶) ( ) 信誉:100 2003-3-28 13:22:26 得分:0
初始化表table1
TRUNCATE TABLE table1
Top
回复人: lxxlily(笨鸟先飞) ( ) 信誉:107 2003-3-28 13:31:43 得分:0
cnuninet(www.helloaspx.com) :晕~~
Top
回复人: zhjzh_zjz(虚心学习,望多指教) ( ) 信誉:117 2003-3-28 15:11:57 得分:0
从入库信息表和入库清单表中得期初期末库存:
SELECT a.mattype as mattype, a.matname as matname, a.spec as spec,a.indate as indate, a.amount AS lastnum, a.matsum AS lastsum,
b.amount AS curnum, b.matsum AS cursum
FROM (SELECT a.mattype, a.matname, a.spec, TO_CHAR(a.indate, 'yyyy-mm') AS indate,
SUM(b.amount) AS amount, SUM(b.matsum) AS matsum
FROM (SELECT a.mattype, a.matname, a.spec, a.indate, SUM(nvl(a.amount, 0)
- NVL(b.amount, 0) + NVL(c.amount, 0)) AS amount, SUM(nvl(a.matsum,
0) - NVL(b.matsum, 0) + NVL(c.matsum, 0)) AS matsum
FROM (SELECT a.mattype AS mattype, a.matname AS matname,
a.spec AS spec, b.indate AS indate, a.amount AS amount,
a.matsum AS matsum, b.matsource AS matsource
FROM materialin a, matin b
WHERE b.serial = a.serial) a, matuse b, matback c
WHERE a.mattype = b.mattype (+) AND a.mattype = c.mattype (+) AND
a.matname = b.matname (+) AND a.matname = c.matname (+) AND
a.spec = b.spec (+) AND a.spec = c.spec (+) AND
a.indate = b.outdate (+) AND a.indate = c.backdate (+)
GROUP BY a.mattype, a.matname, a.spec, a.indate
UNION
SELECT b.mattype, b.matname, b.spec, b.outdate, SUM(nvl(a.amount, 0)
- NVL(b.amount, 0) + NVL(c.amount, 0)) AS amount, SUM(nvl(a.matsum,
0) - NVL(b.matsum, 0) + NVL(c.matsum, 0)) AS matsum
FROM (SELECT a.mattype AS mattype, a.matname AS matname,
a.spec AS spec, b.indate AS indate, a.amount AS amount,
a.matsum AS matsum, b.matsource AS matsource
FROM materialin a, matin b
WHERE b.serial = a.serial) a, matuse b, matback c
WHERE a.mattype (+) = b.mattype AND b.mattype = c.mattype (+) AND
a.matname (+) = b.matname AND b.matname = c.matname (+) AND
a.spec (+) = b.spec AND b.spec = c.spec (+) AND
a.indate (+) = b.outdate AND b.outdate = c.backdate (+)
GROUP BY b.mattype, b.matname, b.spec, b.outdate
UNION
SELECT c.mattype, c.matname, c.spec, c.backdate, SUM(nvl(a.amount, 0)
- NVL(b.amount, 0) + NVL(c.amount, 0)) AS amount, SUM(nvl(a.matsum,
0) - NVL(b.matsum, 0) + NVL(c.matsum, 0)) AS matsum
FROM (SELECT a.mattype AS mattype, a.matname AS matname,
a.spec AS spec, b.indate AS indate, a.amount AS amount,
a.matsum AS matsum, b.matsource AS matsource
FROM materialin a, matin b
WHERE b.serial = a.serial) a, matuse b, matback c
WHERE a.mattype (+) = c.mattype AND b.mattype (+) = c.mattype AND
a.matname (+) = c.matname AND c.matname = b.matname (+) AND
c.spec = a.spec (+) AND c.spec = b.spec (+) AND
c.backdate = b.outdate (+) AND c.backdate = a.indate (+)
GROUP BY c.mattype, c.matname, c.spec, c.backdate) a,
(SELECT a.mattype, a.matname, a.spec, a.indate, SUM(nvl(a.amount, 0)
- NVL(b.amount, 0) + NVL(c.amount, 0)) AS amount, SUM(nvl(a.matsum,
0) - NVL(b.matsum, 0) + NVL(c.matsum, 0)) AS matsum
FROM (SELECT a.mattype AS mattype, a.matname AS matname,
a.spec AS spec, b.indate AS indate, a.amount AS amount,
a.matsum AS matsum, b.matsource AS matsource
FROM materialin a, matin b
WHERE b.serial = a.serial) a, matuse b, matback c
WHERE a.mattype = b.mattype (+) AND a.mattype = c.mattype (+) AND
a.matname = b.matname (+) AND a.matname = c.matname (+) AND
a.spec = b.spec (+) AND a.spec = c.spec (+) AND
a.indate = b.outdate (+) AND a.indate = c.backdate (+)
GROUP BY a.mattype, a.matname, a.spec, a.indate
UNION
SELECT b.mattype, b.matname, b.spec, b.outdate AS indate,
SUM(nvl(a.amount, 0) - NVL(b.amount, 0) + NVL(c.amount, 0))
AS amount, SUM(nvl(a.matsum, 0) - NVL(b.matsum, 0)
+ NVL(c.matsum, 0)) AS matsum
FROM (SELECT a.mattype AS mattype, a.matname AS matname,
a.spec AS spec, b.indate AS indate, a.amount AS amount,
a.matsum AS matsum, b.matsource AS matsource
FROM materialin a, matin b
WHERE b.serial = a.serial) a, matuse b, matback c
WHERE a.mattype (+) = b.mattype AND b.mattype = c.mattype (+) AND
a.matname (+) = b.matname AND b.matname = c.matname (+) AND
a.spec (+) = b.spec AND b.spec = c.spec (+) AND
a.indate (+) = b.outdate AND b.outdate = c.backdate (+)
GROUP BY b.mattype, b.matname, b.spec, b.outdate
UNION
SELECT c.mattype, c.matname, c.spec, c.backdate AS indate,
SUM(nvl(a.amount, 0) - NVL(b.amount, 0) + NVL(c.amount, 0))
AS amount, SUM(nvl(a.matsum, 0) - NVL(b.matsum, 0)
+ NVL(c.matsum, 0)) AS matsum
FROM (SELECT a.mattype AS mattype, a.matname AS matname,
a.spec AS spec, b.indate AS indate, a.amount AS amount,
a.matsum AS matsum, b.matsource AS matsource
FROM materialin a, matin b
WHERE b.serial = a.serial) a, matuse b, matback c
WHERE a.mattype (+) = c.mattype AND b.mattype (+) = c.mattype AND
a.matname (+) = c.matname AND c.matname = b.matname (+) AND
c.spec = a.spec (+) AND c.spec = b.spec (+) AND
c.backdate = b.outdate (+) AND c.backdate = a.indate (+)
GROUP BY c.mattype, c.matname, c.spec, c.backdate) b
WHERE TO_CHAR(b.indate, 'yyyy-mm') <= TO_CHAR(a.indate, 'yyyy-mm') AND
a.mattype = b.mattype (+) AND a.matname = b.matname (+) AND
a.spec = b.spec (+)
GROUP BY a.mattype, a.matname, a.spec, TO_CHAR(a.indate, 'yyyy-mm')) a,
---未完,待续
Top
回复人: zhjzh_zjz(虚心学习,望多指教) ( ) 信誉:117 2003-3-28 15:13:01 得分:0
---接上面
(SELECT a.mattype, a.matname, a.spec, TO_CHAR(a.indate, 'yyyy-mm') AS indate,
SUM(b.amount) AS amount, SUM(b.matsum) AS matsum
FROM (SELECT a.mattype, a.matname, a.spec, a.indate, SUM(nvl(a.amount, 0)
- NVL(b.amount, 0) + NVL(c.amount, 0)) AS amount, SUM(nvl(a.matsum,
0) - NVL(b.matsum, 0) + NVL(c.matsum, 0)) AS matsum
FROM (SELECT a.mattype AS mattype, a.matname AS matname,
a.spec AS spec, b.indate AS indate, a.amount AS amount,
a.matsum AS matsum, b.matsource AS matsource
FROM materialin a, matin b
WHERE b.serial = a.serial) a, matuse b, matback c
WHERE a.mattype = b.mattype (+) AND a.mattype = c.mattype (+) AND
a.matname = b.matname (+) AND a.matname = c.matname (+) AND
a.spec = b.spec (+) AND a.spec = c.spec (+) AND
a.indate = b.outdate (+) AND a.indate = c.backdate (+)
GROUP BY a.mattype, a.matname, a.spec, a.indate
UNION
SELECT b.mattype, b.matname, b.spec, b.outdate, SUM(nvl(a.amount, 0)
- NVL(b.amount, 0) + NVL(c.amount, 0)) AS amount, SUM(nvl(a.matsum,
0) - NVL(b.matsum, 0) + NVL(c.matsum, 0)) AS matsum
FROM (SELECT a.mattype AS mattype, a.matname AS matname,
a.spec AS spec, b.indate AS indate, a.amount AS amount,
a.matsum AS matsum, b.matsource AS matsource
FROM materialin a, matin b
WHERE b.serial = a.serial) a, matuse b, matback c
WHERE a.mattype (+) = b.mattype AND b.mattype = c.mattype (+) AND
a.matname (+) = b.matname AND b.matname = c.matname (+) AND
a.spec (+) = b.spec AND b.spec = c.spec (+) AND
a.indate (+) = b.outdate AND b.outdate = c.backdate (+)
GROUP BY b.mattype, b.matname, b.spec, b.outdate
UNION
SELECT c.mattype, c.matname, c.spec, c.backdate, SUM(nvl(a.amount, 0)
- NVL(b.amount, 0) + NVL(c.amount, 0)) AS amount, SUM(nvl(a.matsum,
0) - NVL(b.matsum, 0) + NVL(c.matsum, 0)) AS matsum
FROM (SELECT a.mattype AS mattype, a.matname AS matname,
a.spec AS spec, b.indate AS indate, a.amount AS amount,
a.matsum AS matsum, b.matsource AS matsource
FROM materialin a, matin b
WHERE b.serial = a.serial) a, matuse b, matback c
WHERE a.mattype (+) = c.mattype AND b.mattype (+) = c.mattype AND
a.matname (+) = c.matname AND c.matname = b.matname (+) AND
c.spec = a.spec (+) AND c.spec = b.spec (+) AND
c.backdate = b.outdate (+) AND c.backdate = a.indate (+)
GROUP BY c.mattype, c.matname, c.spec, c.backdate) a,
(SELECT a.mattype, a.matname, a.spec, a.indate, SUM(nvl(a.amount, 0)
- NVL(b.amount, 0) + NVL(c.amount, 0)) AS amount,
SUM(nvl(a.matsum, 0) - NVL(b.matsum, 0) + NVL(c.matsum, 0))
AS matsum
FROM (SELECT a.mattype AS mattype, a.matname AS matname,
a.spec AS spec, b.indate AS indate, a.amount AS amount,
a.matsum AS matsum, b.matsource AS matsource
FROM materialin a, matin b
WHERE b.serial = a.serial) a, matuse b, matback c
WHERE a.mattype = b.mattype (+) AND a.mattype = c.mattype (+) AND
a.matname = b.matname (+) AND a.matname = c.matname (+) AND
a.spec = b.spec (+) AND a.spec = c.spec (+) AND
a.indate = b.outdate (+) AND a.indate = c.backdate (+)
GROUP BY a.mattype, a.matname, a.spec, a.indate
UNION
SELECT b.mattype, b.matname, b.spec, b.outdate AS indate,
SUM(nvl(a.amount, 0) - NVL(b.amount, 0) + NVL(c.amount, 0))
AS amount, SUM(nvl(a.matsum, 0) - NVL(b.matsum, 0)
+ NVL(c.matsum, 0)) AS matsum
FROM (SELECT a.mattype AS mattype, a.matname AS matname,
a.spec AS spec, b.indate AS indate, a.amount AS amount,
a.matsum AS matsum, b.matsource AS matsource
FROM materialin a, matin b
WHERE b.serial = a.serial) a, matuse b, matback c
WHERE a.mattype (+) = b.mattype AND b.mattype = c.mattype (+) AND
a.matname (+) = b.matname AND b.matname = c.matname (+) AND
a.spec (+) = b.spec AND b.spec = c.spec (+) AND
a.indate (+) = b.outdate AND b.outdate = c.backdate (+)
GROUP BY b.mattype, b.matname, b.spec, b.outdate
UNION
SELECT c.mattype, c.matname, c.spec, c.backdate AS indate,
SUM(nvl(a.amount, 0) - NVL(b.amount, 0) + NVL(c.amount, 0))
AS amount, SUM(nvl(a.matsum, 0) - NVL(b.matsum, 0)
+ NVL(c.matsum, 0)) AS matsum
FROM (SELECT a.mattype AS mattype, a.matname AS matname,
a.spec AS spec, b.indate AS indate, a.amount AS amount,
a.matsum AS matsum, b.matsource AS matsource
FROM materialin a, matin b
WHERE b.serial = a.serial) a, matuse b, matback c
WHERE a.mattype (+) = c.mattype AND b.mattype (+) = c.mattype AND
a.matname (+) = c.matname AND c.matname = b.matname (+) AND
c.spec = a.spec (+) AND c.spec = b.spec (+) AND
c.backdate = b.outdate (+) AND c.backdate = a.indate (+)
GROUP BY c.mattype, c.matname, c.spec, c.backdate) b
WHERE TO_CHAR(b.indate, 'yyyy-mm') <= TO_CHAR(a.indate, 'yyyy-mm') AND
a.mattype = b.mattype (+) AND a.matname = b.matname (+) AND
a.spec = b.spec (+)
GROUP BY a.mattype, a.matname, a.spec, TO_CHAR(a.indate, 'yyyy-mm'))
b
WHERE a.mattype = b.mattype (+) AND a.matname = b.matname (+) AND
a.spec = b.spec (+) AND TO_DATE(a.indate, 'yyyy-mm')
= ADD_MONTHS(TO_DATE(b.indate, 'yyyy-mm'), 1)
--语句完毕
Top
回复人: zhjzh_zjz(虚心学习,望多指教) ( ) 信誉:117 2003-3-28 15:15:27 得分:0
上面用的是Oracle数据库。由于涉及到双向外连接,所以很长
Top
回复人: zhongjz(小海螺) ( ) 信誉:105 2003-3-28 15:46:39 得分:5
从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)
SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,
SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC
FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration
FROM TELFEESTAND a, TELFEE b
WHERE a.tel = b.telfax) a
GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')
Top
回复人: zzlcn() ( ) 信誉:86 2003-3-28 17:24:15 得分:0
请问如果有 10 万 条数据 该怎么查询,我一查询就出错
如果是3万条还可以接受,但是到了3万条以上就不稳定!
我用了 sqlserver 也没有用
10 万条数据来一次分页显示居然要 10-15秒的超长时间!!!!!
如果在分页显示中查询,立即告吹!!!
asp 和 asp.net 我都试用过(+ ms sqlserver)
均是如此
是不是 asp 和 asp.net 都是垃圾中的垃圾!!!
Top
回复人: yonghengdizhen(刹那←→永恒) ( ) 信誉:112 2003-3-28 17:40:16 得分:0
大量复杂的数据分析,在结构设计上就应该要考虑进去.适当设置一些字段或表存储分段统计信息.
否则再好的数据库都撑不住的..
Top
回复人: sishuo(思铄) ( ) 信誉:100 2003-3-29 9:39:01 得分:0
好,收了。
Top
回复人: huijunzi(Cyril) ( ) 信誉:97 2003-3-30 16:49:18 得分:5
有意思,我也来一个,解决跳号的问题:
select min(bh)+1 from Table1 where bh+1 not in(select bh from Table1)
Top
回复人: yonghengdizhen(刹那←→永恒) ( ) 信誉:112 2003-3-31 9:50:13 得分:0
进行复杂数据分析还有一种趋势那就是使用数据仓库(Data Houseware)和OLAP.
Top
回复人: bkss(白开水水) ( ) 信誉:100 2003-4-1 11:09:20 得分:0
哈哈,我也来凑热闹。。。
DECLARE @QuitMedNo char(13)
DECLARE @PreRecipeNo char(13),@PreRecipeXNo char(3)
Declare @zyxh char(12),@kdks char(8)
DECLARE @DepotName char(10)
BEGIN TRAN
if not exists(select 摆药单号 from 摆药单 where 状态='00' and 摆药单号=@PutMedNo)
begin
return 0
end
EXECUTE Sp_GetBillNo @QuitMedNo output,'D'
INSERT INTO [退药]([退药序号], [操作员], [退药时间], [退药说明])
VALUES(@QuitMedNo,@Operator,cast(getdate() as smalldatetime),@Intro)
if (@@error<>0 or @@rowcount=0)
begin
rollback transaction
raiserror('插入退药表失败',16,-1)
return 1
end
DECLARE PutMed_Cursor CURSOR FOR
SELECT DISTINCT A.处方号,A.处方序号,B.住院序号,B.科室,C.名称 as 摆药区 FROM 摆药单明细 A inner join 处方 B ON A.处方号 =B.处方号 AND A.处方序号=B.处方序号
INNER JOIN 摆药区 C ON B.摆药区=C.代码 WHERE A.摆药单号=@PutMedNo
OPEN PutMed_Cursor
FETCH NEXT FROM PutMed_Cursor INTO @PreRecipeNo, @PreRecipeXNo,@zyxh,@kdks,@DepotName
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC usp_QuitBillDetail @QuitMedNo ,@PutMedNo,@PreRecipeNo,@PreRecipeXNo,@zyxh,@kdks,@fsks,@DepotName
--另一个存储过程
if (@@error<>0)
begin
rollback transaction
CLOSE PutMed_Cursor
--DEALLOCATE PutMed_Cursor
raiserror('更新退单处方明细失败',16,-1)
return 1
end
FETCH NEXT FROM PutMed_Cursor INTO @PreRecipeNo, @PreRecipeXNo,@zyxh,@kdks
END
Top
回复人: bkss(白开水水) ( ) 信誉:100 2003-4-1 11:21:36 得分:10
个人认为,偶写了这么久的SQL,只说语法很无聊,语句的涵义与灵活的组合很重要,下面这个是写的一个药品管理的存储过程的一句,很经典:
UPDATE 药房库存 SET 库存数量=库存数量-B.用量 FROM [药房库存] A ,
( Select sum(用量) as 用量,药品价码 FROM 处方项
WHERE 处方号=@RecipeNo AND 处方序号=@RecipeXNo
GROUP BY 药品价码
) B WHERE A.药品价码=B.药品价码 AND A.库房名称=@DepotName
这是一个参照B表将A表中库存一一修改,而B表中存在一个求和,A表也与B表关联,同时要满足A表条件。
Top
回复人: yonghengdizhen(刹那←→永恒) ( ) 信誉:112 2003-4-1 11:26:50 得分:0
是的..SQL中应用的经典应该只考虑SQL查询的应用..
存储过程已经使用控制语法操作了,和别的程序设计语言设计算法没什么区别..
Top
回复人: yexiao(叶开) ( ) 信誉:100 2003-4-1 14:11:35 得分:0
gz
Top
回复人: rong451(rong451) ( ) 信誉:100 2003-4-1 15:43:10 得分:0
very good 我一定收藏!!!
Top
回复人: gengwei80(gengwei) ( ) 信誉:99 2003-4-2 9:40:27 得分:0
create or replace procedure p_table
(
p_g3e_fno g3e_features_optable.g3e_fno%type
)
as
v_xlmc VARCHAR2(12);
v_XLDM VARCHAR2(5);
cursor c_table IS
select g3e_table from g3e_component where g3e_cno=(select g3e_primaryattributecno
from g3e_features_optable where g3e_fno=p_g3e_fno);
type t_sor is ref cursor;
v_sor t_sor;
str varchar2(50);
begin
for v_table in c_table loop
str:='select xlmc,xldm from '||v_table.g3e_table;
dbms_output.put_line(v_table.g3e_table);
open v_sor for str;
loop
fetch v_sor into v_xlmc,v_xldm;
dbms_output.put_line('hello g3e_table');
dbms_output.put_line(v_xlmc||' '||v_xldm);
exit when v_sor%notfound;
end loop;
close v_sor;
end loop;
end p_table;
|