如何删除表中的重复记录?等等常用SQL语句的积累
1.如何删除表中的重复记录?(这里指记录的每个字段都要相同)
select distinct * into #temp from tab
delete tab
insert tab select * from #temp
drop table #temp
1.DISTINCT 是 SUM、AVG 和 COUNT 的可选关键字。如果使用 DISTINCT,那么在计算总和、平均值或计数之前,先消除重复的值。
如果使用 DISTINCT 关键字,表达式必须只包含列名。而不能包含算术表达式。
以下查询返回商务书籍的平均价格(不包括重复的值):
USE pubs
SELECT AVG(DISTINCT price)
FROM titles
WHERE type = 'business'
2.DISTINCT 关键字可从 SELECT 语句的结果中除去重复的行,distinct 后面的字段可以是多个或*,是一个那就各军兵种那个字段来取不重复的,
如果是多个,那就是筛选所选的字短都相同的记录.
USE pubs
SELECT DISTINCT au_id--按照一个字段筛选
FROM titleauthor
USE pubs
SELECT DISTINCT au_id,au_name --按照两个字段筛选
FROM titleauthor
2.怎样返回数据库中用户表的表单名
select name from sysobjects where xtype='U'
select name from sysobjects where xtype = 'u' and status >=0
3.
http://community.csdn.net/Expert/topic/4191/4191899.xml?temp=.5814325
各位大大请帮个忙,
一个表中A字段是int型的自动编号,B字段是首先要获取A字段已有的自动编号数据再经过加入时间等后生成的数据,表如下
C,D(日期),E为其他数据
列名 A(自动递加) B(A字段数据+日期等) C D E
---------------------------------------------------
1 A+D . . .
2 A+D . . .
---- 建立测试环境:
create table table1(a int identity,b varchar(20),c datetime,d datetime,e int)
create proc proc1
@c datetime,
@d datetime,
@e int
as
declare @f int
insert table1 (c,d,e) values(@c,@d,@e)
select @f=@@identity
if @@error=0
begin
update table1 set b=convert(varchar,a)+convert(varchar(12),d,120) where a=@f
end
---执行存储过程
exec proc1 '2001-10-01','2001-10-20',45
select * from table1
4.事务问题
http://community.csdn.net/Expert/topic/4245/4245634.xml?temp=.663891
(1)try:
-------------------------------------------------------------------------
CREATE PROCEDURE sp_Order_UpdateOrderFormHeadByAffirm
@OrderFormHeadID int,
@AffirmPerson nvarchar(50)
AS
BEGIN TRANSACTION
DECLARE @OrderFormNo nvarchar(50), @FranchiserNo nvarchar(10), @TotalSum decimal(18,4)
--更新状态为确认
UPDATE
AD_U_HEAD_A_SSGL
SET
Tag = 1
WHERE
OrderFormHeadID = @OrderFormHeadID
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN
END
------------------------------------------------------------------------------------------
--返回 订单管理(HEAD)的一些信息
SELECT
@OrderFormNo = OrderFormNo,
@FranchiserNo = FranchiserNo,
@TotalSum = TotalSum
FROM
AD_U_HEAD_A_SSGL
WHERE
OrderFormHeadID = @OrderFormHeadID
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN
END
------------------------------------------------------------------------------------------
--更新 订单管理(DATA)
UPDATE
AD_U_DATA_A_SSGL
SET
Tag = 1,
AffirmPerson = @AffirmPerson,
AffirmDate = GETDATE()
WHERE
OrderFormNo = @OrderFormNo
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN
END
------------------------------------------------------------------------------------------
--经销代理资信余额(MAIN)
EXEC sp_Order_UpdateCreditBalance @FranchiserNo, 0, 0, 0, @TotalSum, 0
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN
END
------------------------------------------------------------------------------------------
--新增 订单确认日志(SLOG)
INSERT INTO
AD_U_SLOG_A_DDQR(OrderFormNo, GoodsNo, Quantity,
UnitPrice, ProductPackingNo,TotalQuantity, TotalSum, Rebate, FactSum)
SELECT
OrderFormNo, GoodsNo, Quantity, UnitPrice, ProductPackingNo,
TotalQuantity, TotalSum, Rebate, FactSum
FROM
AD_U_DATA_A_SSGL
WHERE
OrderFormNo = @OrderFormNo
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN
END
COMMIT TRANSACTION
GO
(2)----------------------------------
CREATE PROCEDURE sp_Order_UpdateOrderFormHeadByAffirm
@OrderFormHeadID int,
@AffirmPerson nvarchar(50)
AS
SET XACT_ABORT ON
BEGIN TRANSACTION
......
(3)你说得没错 其实你那样用事务的画没什么作用,每个存储过程都是一个事务。如果用事务最好有出错的处理是否回滚之类的东西。但是要考虑好表之间的关联性,如果都是一些单独的表,可以分几个事务处理,如果是父子表还是要放在一个事务里面。保证其数据的准确
性。
4请给条如何找出重复记录的SQL语句
select id,name,parentDeptid,status as state,type,showindex,url,corpid = 1001
from zfj_dept
日期:
select convert(varchar(16),getDate(),120) 2005-11-18 10:20
select convert(varchar,datepart(minute,getdate())) 获得分钟且转换为字符型
内联结/外联结
--返回两个表中共有的所有记录
select *
from testTable as a
inner join TestTableChild as b on a.id = b.parentid
--返回(左表)TestTable所有记录
select *
from testTable as a
left outer join TestTableChild as b on a.id = b.parentid
--返回(右表)TestTableChild的所有记录
select *
from testTable as a
right outer join TestTableChild as b on a.id = b.parentid
--- 返回 两个表里共有的记录,且不重复
select a.id,a.name,b.name
from testTable as a
inner join TestTableChild as b on a.id = b.parentid
group by a.id,a.name,b.name
--返回(左表)TestTable所有记录
select a.id,a.name,b.name
from testTable as a
left outer join TestTableChild as b on a.id = b.parentid
group by a.id,a.name,b.name
--------
select a.id,a.subject,b.contentType,c.AuguryUp,c.AuguryDown,
case c.type when '1' then '爱情' when '2' then '财运' when '3' then '事业' end as type
from MMS_Content as a
left outer Join MMS_ContentChild as b on a.id = b.parentid
left outer join AuguryList as c on a.id = c.parentid
where a.dept = 6
group by a.id,a.subject,b.contentType,c.AuguryUp,c.augurydown,c.type
向一个表A中插入记录,并且插入的记录在A中不存在(通过一个字段来判断)
insert into trace_users (tracekey,muteSMS,CreateTime,traceuser,tracetime,traceSlot,traceduration)
select 'TRACE_TIMER',0,getdate(),mobileid,getdate(),'30','0'
from Epm_EmployeeList where corpid = 10001
and mobileid not in (select traceuser from trace_users )
and mobileid like '13%' and len(mobileid) = 11
下面的要好些(not exists)
select 'TRACE_TIMER',0,getdate(),mobileid,getdate(),'30','0'
from Epm_EmployeeList where corpid = 10001
and not exists (select traceuser from trace_users )
and mobileid like '13%' and len(mobileid) = 11
cast 和convert DateAdd和DateDiff
--EPM_EmployeeList 里的active = 1
--trace_Timer 里的active = 1
--trace_users 里的traceduration 清0
--执行例子:exec up_SetSchedule 1001,'1009,1019'
ALTER proc up_SetSchedule
--create proc up_SetSchedule
@nCorpId int,
@vchEmployeeIds varchar(8000),
@TimeStart DateTime,
@TimeEnd DateTime
as
declare @sql varchar(8000),@TraceSolt int
SET XACT_ABORT ON --任何一部有问题是都会回滚事务
BEGIN TRANSACTION --开始事务
update EPM_EmployeeList set activeStatus = 0 where corpid = @nCorpId and activeStatus != 0
if (@vchEmployeeIds !='')
begin
set @sql ='update EPM_EmployeeList set activeStatus = 1 where corpid= '+convert(varchar(10),@nCorpId)+ ' and id in ('+@vchEmployeeIds+')'
exec (@sql)
--更新Trace_timer
set @sql ='update trace_Timer set activeStatus = 1 where corpid= '+convert(varchar(10),@nCorpId)+ ' and mobileid in ('
set @sql= @sql+'select mobileid from EPM_EmployeeList where id in ('+@vchEmployeeIds+'))'
exec (@sql)
select @TraceSolt = (select tracesolt from EPM_EnterpriseList where id = @nCorpId)
('+@vchEmployeeIds+'))'
set @sql ='update trace_users set createTime ='''+cast(@timeStart as varchar)+''''
set @sql= @sql+',traceTime='''+cast(DateAdd(minute,@TraceSolt,@timeStart) as varchar )
set @sql= @sql+''',traceDuration ='''+convert(varchar,datediff(minute,@timeStart,@timeEnd))+''' where traceuser in ('
set @sql= @sql+'select mobileid from EPM_EmployeeList where id in ('+@vchEmployeeIds+'))'
exec (@sql)
end
COMMIT TRANSACTION --提交事务
GO
--导出企业根据大类别。四个表就晕了。。。。。。。
--插入到临时表里
select distinct (a.id),a.corpname,a.corplinkman,a.phonenumber,a.createtime,a.address
,(select distinct d.name
from
dz_subinfoDefine as c,
dz_mainInfoDefine as d
where c.maintype = d.maintype
and c.subtype = b.infotype) as type
into #table2
from dz_corporation as a
left join dz_information as b on a.id = b.corpid
--插入到表里.需要两次是因为无法对类别(大类)进行排序
select case when type IS NULL then '未知类别' else type end as 大类别,corpname as 名称 ,corplinkman as 联系人,phonenumber as 联系电话,address as 地址 ,createTime as 创建时间 into Table1 from #table2
order by type
----删除临时表
drop table #table2
好的方法????找不到........可能是数据库设计的不好.
通过另一个表来更新本表的记录.
begin transaction
update EPM_Employeelist set loginname =b.loginname,password= b.password
from zfj_users as b
where
EPM_Employeelist.userid = b.userid
and corpid = 10001
rollback transaction
在in子句中如何写变量的表达式问题
set @ids = '14501,14502,14503'
select * from table1 where charindex(','+cast(id as varchar(20))+',',','+@ids+',')>0
转载于:https://www.cnblogs.com/yhb199/archive/2008/07/01/1233162.html
如何删除表中的重复记录?等等常用SQL语句的积累相关推荐
- Oracle 查找并删除表中的重复记录
案例:一个应用表中的一个字段是主键,向表中插入数据时,先把数据放在临时表中(没有主键)然后再插入应用表. 这时候如果临时表中有重复数据,无论是主键字段businessid有重复,还是一整行有重复都会报 ...
- SQL删除表中的重复记录只保留其中一条,最简单的方法:ROW_NUMBER()
在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢?. 要求:删除表中多余的重复记录,且保留 id 最小的那一条记录. CREATE TABLE #temp_data( id BI ...
- 如何删除表中的重复记录?
--测试数据 /*----------------------------- select * from tt -----------------------------*/ id ...
- oracle中的rowid--伪列-删除表中的重复内容-实用
1.rowid是一个伪列,是用来确保表中行的唯一性,它并不能指示出行的物理位置,但可以用来定位行. 2.rowid是存储在索引中的一组既定的值(当行确定后).我们可以像表中普通的列一样将它选出来. 3 ...
- 用一条sql语句删除表中所相同记录
用一条sql语句删除表中所相同记录如下一.具有主键的情况 a.具有唯一性的字段id(为唯一主键) delete table where id not in ( select max(id) from ...
- mysql 找表重复数据,mysql 数据表中查找重复记录
mysql 数据表中查找重复记录 复制代码 代码如下: select user_name,count(*) as count from user_table group by user_name ha ...
- Oracle 查看表中重复的记录,以及去除表中的重复记录
--查看表中重复的记录 select tscw.L_SEC_KEY as L_BOND_KEY ,---债券内码 to_date(twcb.b_info_carrydate,'yyyyMM ...
- MySQL 删除表中的数据记录
文章目录 前言 一.删除表中的数据记录? 1.删除特定数据记录 2.删除所有数据记录 总结 前言 删除数据记录是数据操作中常见的操作,可以删除表中已经存在的数据记录.在MySQL中可以通过DELETE ...
- Oracle删除表中的重复数据
Oracle数据库删除表中的重复数据,只保留其中的一条,以两个字段为例,提供两种方法 ①.直接delete重复的数据 delete from table_name t1 where (t1.col1, ...
最新文章
- Android 通过 annotation ViewInject
- 深入理解IIS的多线程工作机制
- 量化风控学习:原来评分卡模型的概率是这么校准的!
- [开发笔记]-VS2012打开解决方案崩溃或点击项目崩溃
- 36-高级特性之自定义类(1)
- 原生JS实现一个无缝轮播图插件(支持vue)
- 顺丰标准 150标准丰密面单 Clodop 实现打印
- 请设计输出实数的格式,包括:⑴一行输出一个实数;⑵一行内输出两个实数;⑶一行内输出三个实数。实数用6.2f格式输出。
- vs2010学习版loadimage();函数载入图片无法加载的问题
- 2的次幂表示(递归求解)
- Chrome 扩展是什么?我们如何建造它?
- U盘启动制作及系统安装
- 云服务器测速脚本_服务器性能自动化测试脚本
- Docker基础-使用Dockerfile创建镜像
- LoadRunner使用
- 【深度学习】TensorFlow基础知识点总结
- linux 触控板 不识别,linux – 未检测到触控板
- ffmpeg命令:rtp音频推流拉流
- moment中时间为12小时制,dayjs中时间为12小时制
- vue项目使用icons矢量图标
热门文章
- 枚举值是什么意思_期权的Theta值是什么意思?有什么意义?
- exif.js html图片旋转,exif.js 实现图片旋转到正常
- mysql8 设置了默认值 CURRENT_TIMESTAMP 依然报null问题
- mysql执行ref_MySql执行分析
- mysql 分片 数据迁移_简述MySQL分片中快速数据迁移_MySQL
- 基于c#的相关性分析_不同区间衰退路径下锂离子电池的性能相关性及温度适用性分析...
- 简述机器指令与微指令之间的关系_《计算机组成原理》试卷B与参考答案
- php序列化函数输入0存不了,php序列化函数的区别
- python字典类型写入文件_python 字典写入文件
- 选择虚拟主机服务器,选择虚拟主机服务器