asp精妙的SQL语句例子(2)

时间:2008-03-04 17:42:00 

9.SQL语句技巧

9.1、一个SQL语句的问题:行列转换

select * from v_temp

上面的视图结果如下:
user_name role_name
-------------------------
系统管理员 管理员
feng 管理员
feng 一般用户
test 一般用户
想把结果变成这样:
user_name role_name
---------------------------
系统管理员 管理员
feng 管理员,一般用户
test 一般用户
===================

create table a_test(name varchar(20),role2 varchar(20))
insert into a_test values('李','管理員')
insert into a_test values('張','管理員')
insert into a_test values('張','一般用戶')
insert into a_test values('常','一般用戶')
create function join_str(@content varchar(100))
returns varchar(2000)
as
begin
declare @str varchar(2000)
set @str=''
select @str=@str+','+rtrim(role2) from a_test where [name]=@content
select @str=right(@str,len(@str)-1)
return @str
end
go

--调用:

select [name],dbo.join_str([name]) role2 from a_test group by [name]
--select distinct name,dbo.uf_test(name) from a_test

9.2、求助!快速比较结构相同的两表

结构相同的两表,一表有记录3万条左右,一表有记录2万条左右,我怎样快速查找两表的不同记录?
============================
给你一个测试方法,从northwind中的orders表取数据。

select * into n1 from orders
select * into n2 from orders

 

select * from n1
select * from n2

--添加主键,然后修改n1中若干字段的若干条

alter table n1 add constraint pk_n1_id primary key (OrderID)
alter table n2 add constraint pk_n2_id primary key (OrderID)
select OrderID from (select * from n1
union
select * from n2) a group by OrderID having count(*) > 1

应该可以,而且将不同的记录的ID显示出来。

下面的适用于双方记录一样的情况,

select * from n1 where orderid in
(
select OrderID from (select * from n1
union
select * from n2) a group by OrderID having count(*) > 1
)

至于双方互不存在的记录是比较好处理的
--删除n1,n2中若干条记录

delete from n1 where orderID in ('10728','10730')
delete from n2 where orderID in ('11000','11001')

*************************************************************
-- 双方都有该记录却不完全相同

select * from n1 where orderid in
(
select OrderID from (select * from n1
union
select * from n2) a group by OrderID having count(*) > 1
)
union
--n2中存在但在n1中不存的在10728,10730
select * from n1 where OrderID not in (select OrderID from n2)
union
--n1中存在但在n2中不存的在11000,11001
select * from n2 where OrderID not in (select OrderID from n1)

9.3、四种方法取表里n到m条纪录:

1.

select top m * into 临时表(或表变量) from tablename order by columnname -- 将top m笔插入
set rowcount n
select * from 表变量 order by columnname desc

2.

select top n * from
(select top m * from tablename order by columnname) a
order by columnname desc

3.如果tablename里没有其他identity列,那么:

select identity(int) id0,* into #temp from tablename

取n到m条的语句为:

select * from #temp where id0 >=n and id0 <= m

如果你在执行select identity(int) id0,* into #temp from tablename这条语句的时候报错,那是因为你的DB中间的select into/bulkcopy属性没有打开要先执行:

exec sp_dboption 你的DB名字,'select into/bulkcopy',true

4.如果表里有identity属性,那么简单:

select * from tablename where identitycol between n and m

5.如何删除一个表中重复的记录?

create table a_dist(id int,name varchar(20))
insert into a_dist values(1,'abc')
insert into a_dist values(1,'abc')
insert into a_dist values(1,'abc')
insert into a_dist values(1,'abc')
exec up_distinct 'a_dist','id'
select * from a_dist
create procedure up_distinct(@t_name varchar(30),@f_key varchar(30))
--f_key表示是分組字段﹐即主鍵字段
as
begin
declare @max integer,@id varchar(30) ,@sql varchar(7999) ,@type integer
select @sql = 'declare cur_rows cursor for select '+@f_key+' ,count(*) from ' +@t_name +' group by ' +@f_key +' having count(*) > 1'
exec(@sql)
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
select @type = xtype from syscolumns where id=object_id(@t_name) and name=@f_key
if @type=56
select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+ @id
if @type=167
select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+''''+ @id +''''
exec(@sql)
fetch cur_rows into @id,@max
end
close cur_rows
deallocate cur_rows
set rowcount 0
end
select * from systypes
select * from syscolumns where id = object_id('a_dist')

标签:sql,邮局,selsect,表
0
投稿

猜你喜欢

  • Linux环境下安装MySQL8.0的完整步骤

    2024-01-22 05:26:47
  • 告别网页搜索!教你用python实现一款属于自己的翻译词典软件

    2023-08-08 17:46:58
  • Go语言单元测试模拟服务请求和接口返回

    2024-04-23 09:41:13
  • python opencv圆、椭圆与任意多边形的绘制实例详解

    2021-12-08 08:20:48
  • vue中view-model双向绑定基础原理解析

    2024-05-28 15:53:17
  • python抢购软件/插件/脚本附完整源码

    2021-04-25 22:03:17
  • Python中的True,False条件判断实例分析

    2023-09-30 07:34:24
  • MySQL数据库管理必备工具 phpMyAdmin 3.0

    2008-12-10 14:12:00
  • 举例讲解Python设计模式编程中的访问者与观察者模式

    2021-06-10 06:38:16
  • 在django admin详情表单显示中添加自定义控件的实现

    2023-09-24 18:56:00
  • python打造爬虫代理池过程解析

    2021-10-14 23:43:44
  • ASP申请单动态添加实现方法及代码

    2008-11-04 11:09:00
  • 用python求一重积分和二重积分的例子

    2021-09-30 10:01:19
  • uniapp封装小程序雷达图组件的完整代码

    2024-04-17 09:55:26
  • C# 连接本地数据库的实现示例

    2024-01-23 09:35:15
  • 解决IE6、IE7、Firefox兼容最简单的CSS Hack

    2007-10-14 10:51:00
  • JavaScript中通用的jquery动画滚屏实例

    2024-04-22 22:22:34
  • Django中的JWT身份验证的实现

    2022-10-28 23:01:54
  • Python 发送邮件方法总结

    2022-04-05 21:17:06
  • ASP调用系统ping命令代码

    2008-04-27 20:45:00
  • asp之家 网络编程 m.aspxhome.com