金沙棋牌app手机下载

当前位置:金沙棋牌 > 金沙棋牌app手机下载 > SQL经典短小代码收集,SQL计算上下两行某列的差

SQL经典短小代码收集,SQL计算上下两行某列的差

来源:http://www.logblo.com 作者:金沙棋牌 时间:2019-11-09 19:48

 

 上一篇: select top 1 * from [news_table] where [新闻标识列]<当前id号 where ......
 下一篇: select top 1 * from [news_table] where [新闻标识列]>当前id号 where ...... order by [新闻标识列] desc

  • 说明:复制表(只复制结构,源表名:a 新表名:b)
    select * into b from a where 1<>1

  • 说明:拷贝表(拷贝数据,源表名:a 目标表名:b)
    insert into b(a, b, c) select d,e,f from b;

  • 说明:显示文章、提交人和最后回复时间
    select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

  • 说明:外连接查询(表名1:a 表名2:b)
    select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

  • 说明:日程安排提前五分钟提醒
    select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

  • 说明:两张关联表,删除主表中已经在副表中没有的信息
    delete from info where not exists ( select * from infobz where info.infid=infobz.infid )

  • 说明:--

    SQL:

    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

  • 说明:--
    select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源地,高考总成绩

  • 从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)

    金沙棋牌app手机下载,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')

  • 说明:四表联查问题
    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

  • 说明:得到表中最小的未使用的ID号

  • SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID  FROM Handle WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)

  • 一个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

  • 快速比较结构相同的两表

    结构相同的两表,一表有记录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)

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

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

SELECT * FROM #TempHuDong
SELECT TOP 1 ABS(a.num -b.num) '差'
FROM (select row_number()over(order by getdate()) as id,* from #TempHuDong) as a
LEFT JOIN (select row_number()over(order by getdate()) as id,* from #TempHuDong) as b
ON a.id = b.id - 1

金沙棋牌app手机下载 1

  • 如何删除一个表中重复的记录?
    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')

  • 查询数据的最大排序问题(只能用一条语句写)
    CREATE TABLE hard (qu char (11) ,co char (11) ,je numeric(3, 0))

    insert into hard values ('A','1',3)
    insert into hard values ('A','2',4)
    insert into hard values ('A','4',2)
    insert into hard values ('A','6',9)
    insert into hard values ('B','1',4)
    insert into hard values ('B','2',5)
    insert into hard values ('B','3',6)
    insert into hard values ('C','3',4)
    insert into hard values ('C','6',7)
    insert into hard values ('C','2',3)

金沙棋牌app手机下载 2

BULK INSERT A
FROM 'C:UserszengzhanDesktopa.txt'
WITH (
    FIELDTERMINATOR = '|',
    ROWTERMINATOR = 'n'
)
--2w

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 &gt;=n and id0 &lt;= 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  

SELECT * FROM #TempHuDong

--1.   in
select  *
from    t
where   NAME in (select name
                 from   t
                 group by name
                 having count(name)>1)

要求查询出来的结果如下:  

qu co je  
----------- ----------- -----  
A 6 9  
A 2 4  
B 3 6  
B 2 5  
C 6 7  
C 3 4  


就是要按qu分组,每组中取je最大的前2位!!  
而且只能用一句sql语句!!!  
select * from hard a where je in (select top 2 je from hard b where
a.qu=b.qu order by je)  

 

 
--3 .  EXISTS
select  *
from    t
where   exists ( select *
                 from   (select name
                         from   t
                         group by name
                         having count(name)>1
                        ) a
                 where  a.NAME=t.name )

  • 求删除重复记录的sql语句?
    怎样把具有相同字段的纪录删除,只留下一条。
    例如,表test里有id,name字段
    如果有name相同的记录 只留下一条,其余的删除。
    name的内容不定,相同的记录数不定。

    有没有这样的sql语句?

    A:一个完整的解决方案:

    将重复的记录记入temp1表:
    select [标志字段id],count(*) into temp1 from [表名]
    group by [标志字段id]
    having count(*)>1

    2、将不重复的记录记入temp1表:
    insert temp1 select [标志字段id],count(*) from [表名] group by [标志字段id] having count(*)=1

    3、作一个包含所有不重复记录的表:
    select * into temp2 from [表名] where 标志字段id in(select 标志字段id from temp1)

    4、删除重复表:
    delete [表名]

    5、恢复表:
    insert [表名] select * from temp2

    6、删除临时表:
    drop table temp1

    drop table temp2

    B:
    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')

  • 行列转换--普通

    假设有张学生成绩表(CJ)如下
    Name Subject Result
    张三 语文 80
    张三 数学 90
    张三 物理 85
    李四 语文 85
    李四 数学 92
    李四 物理 82

    想变成
    姓名 语文 数学 物理
    张三 80 90 85
    李四 85 92 82

    declare @sql varchar(4000)
    set @sql = 'select Name'
    select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
    from (select distinct Subject from CJ) as a
    select @sql = @sql+' from test group by name'
    exec(@sql)

    行列转换--合并

    有表A,
    id pid
    1 1
    1 2
    1 3
    2 1
    2 2
    3 1
    如何化成表B:
    id pid
    1 1,2,3
    2 1,2
    3 1

    创建一个合并的函数
    create function fmerg(@id int)
    returns varchar(8000)
    as
    begin
    declare @str varchar(8000)
    set @str=''
    select @str=@str+','+cast(pid as varchar) from 表A where id=@id
    set @str=right(@str,len(@str)-1)
    return(@str)
    End
    go

    --调用自定义函数得到结果
    select distinct id,dbo.fmerg(id) from 表A

  • 如何取得一个数据表的所有列名

    方法如下:先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名。
    SQL语句如下:
    declare @objid int,@objname char(40)
    set @objname = 'tablename'
    select @objid = id from sysobjects where id = object_id(@objname)
    select 'Column_name' = name from syscolumns where id = @objid order by colid

    SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='users'

  • 通过SQL语句来更改用户的密码

    修改别人的,需要sysadmin role
    EXEC sp_password NULL, 'newpassword', 'User'

    如果帐号为SA执行EXEC sp_password NULL, 'newpassword', sa

  • 怎么判断出一个表的哪些字段不允许为空?

    select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE='NO' and TABLE_NAME=tablename

  • 如何在数据库里找到含有相同字段的表?
    a. 查已知列名的情况
    SELECT b.name as TableName,a.name as columnname
    From syscolumns a INNER JOIN sysobjects b
    ON a.id=b.id
    AND b.type='U'
    AND a.name='你的字段名字'

  • 未知列名查所有在不同表出现过的列名
    Select o.name As tablename,s1.name As columnname
    From syscolumns s1, sysobjects o
    Where s1.id = o.id
    And o.type = 'U'
    And Exists (
    Select 1 From syscolumns s2
    Where s1.name = s2.name
    And s1.id <> s2.id
    )

  • 查询第xxx行数据

    假设id是主键:
    select * from (select top xxx * from yourtable) aa where not exists(select 1 from (select top xxx-1 * from yourtable) bb where aa.id=bb.id)

    如果使用游标也是可以的
    fetch absolute [number] from [cursor_name]
    行数为绝对行数

  • SQL Server日期计算
    a. 一个月的第一天
    SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
    b. 本周的星期一
    SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
    c. 一年的第一天
    SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
    d. 季度的第一天
    SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
    e. 上个月的最后一天
    SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
    f. 去年的最后一天
    SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
    g. 本月的最后一天
    SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
    h. 本月的第一个星期一
    select DATEADD(wk, DATEDIFF(wk,0,
    dateadd(dd,6-datepart(day,getdate()),getdate())
    ), 0)
    i. 本年的最后一天
    SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。

  • 获取表结构[把 'sysobjects' 替换 成 'tablename' 即可]

    SELECT CASE IsNull(I.name, '')
    When '' Then ''
    Else '*'
    End as IsPK,
    Object_Name(A.id) as t_name,
    A.name as c_name,
    IsNull(SubString(M.text, 1, 254), '') as pbc_init,
    T.name as F_DataType,
    CASE IsNull(TYPEPROPERTY(T.name, 'Scale'), '')
    WHEN '' Then Cast(A.prec as varchar)
    ELSE Cast(A.prec as varchar) + ',' + Cast(A.scale as varchar)
    END as F_Scale,
    A.isnullable as F_isNullAble
    FROM Syscolumns as A
    JOIN Systypes as T
    ON (A.xType = T.xUserType AND A.Id = Object_id('sysobjects') )
    LEFT JOIN ( SysIndexes as I
    JOIN Syscolumns as A1
    ON ( I.id = A1.id and A1.id = object_id('sysobjects') and (I.status & 0x800) = 0x800 AND A1.colid <= I.keycnt) )
    ON ( A.id = I.id AND A.name = index_col('sysobjects', I.indid, A1.colid) )
    LEFT JOIN SysComments as M
    ON ( M.id = A.cdefault and ObjectProperty(A.cdefault, 'IsConstraint') = 1 )
    ORDER BY A.Colid ASC

  • 提取数据库内所有表的字段详细说明的SQL语句

    SELECT
    (case when a.colorder=1 then d.name else '' end) N'表名',
    a.colorder N'字段序号',
    a.name N'字段名',
    (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else ''
    end) N'标识',
    (case when (SELECT count(*)
    FROM sysobjects
    WHERE (name in
    (SELECT name
    FROM sysindexes
    WHERE (id = a.id) AND (indid in
    (SELECT indid
    FROM sysindexkeys
    WHERE (id = a.id) AND (colid in
    (SELECT colid
    FROM syscolumns
    WHERE (id = a.id) AND (name = a.name))))))) AND
    (xtype = 'PK'))>0 then '√' else '' end) N'主键',
    b.name N'类型',
    a.length N'占用字节数',
    COLUMNPROPERTY(a.id,a.name,'PRECISION') as N'长度',
    isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as N'小数位数',
    (case when a.isnullable=1 then '√'else '' end) N'允许空',
    isnull(e.text,'') N'默认值',
    isnull(g.[value],'') AS N'字段说明'
    FROM syscolumns a
    left join systypes b
    on a.xtype=b.xusertype
    inner join sysobjects d
    on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
    left join syscomments e
    on a.cdefault=e.id
    left join sysproperties g
    on a.id=g.id AND a.colid = g.smallid
    order by object_name(a.id),a.colorder

  • 快速获取表test的记录总数[对大容量表非常有效]

    快速获取表test的记录总数:
    select rows from sysindexes where id = object_id('test') and indid in (0,1)

    update 2 set KHXH=(ID+1)2 2行递增编号
    update [23] set id1 = 'No.'+right('00000000'+id,6) where id not like 'No%' //递增
    update [23] set id1= 'No.'+right('00000000'+replace(id1,'No.',''),6) //补位递增
    delete from [1] where (id%2)=1
    奇数

  • 替换表名字段
    update [1] set domurl = replace(domurl,'Upload/Imgswf/','Upload/Photo/') where domurl like '%Upload/Imgswf/%'

  • 截位
    SELECT LEFT(表名, 5)

金沙棋牌app手机下载 3

--例如:4-10条就应该写成
selecttop10-4+1*from test where id notin(selecttop4-1 id from test)

  

金沙棋牌app手机下载 4

3
5
5
5
3
*/

use CTC315
select * from sysfiles

--N到结尾记录
Select Top N * From 表Order by ID Desc
 
统计比例:0.11

金沙棋牌app手机下载 5

 

--a b 字段phone
--A表大 B表小 a和b可能有重复数据
--随机删除a表n条数据 重复的保留
DELETE  A
FROM    A
        JOIN ( SELECT TOP ( 6000 )
                        *
               FROM     ( SELECT    ROW_NUMBER() OVER ( ORDER BY u2.phone ) id ,
                                    u2.phone
                          FROM      ( SELECT    *
                                      FROM      ( SELECT    phone
                                                  FROM      A
                                                  EXCEPT
                                                  SELECT    phone
                                                  FROM      B
                                                ) u1
                                    ) u2
                        ) result1
               WHERE    id > 30  --30条之后的随机删除
               ORDER BY NEWID()  --随机
               
             ) result3 ON A.phone = result3.phone

SQL 2005:
在 SQL 2005 中備份 Transaction Log 語法改為 Backup LOG
BACKUP LOG DBName WITH NO_LOG
DBCC SHRINKFILE(2,200)

金沙棋牌app手机下载 6

一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数。

select id, Count(*) from tb group by id having count(*)>1

 

--删除上万条记录 不要用 not in
delete from acct_item a where not exists (select 1 from subs b where a.subs_id=b.subs_id ) 

 

 

--两条记录完全相同,如何删除其中一条
set rowcount=1 
delete from thetablename where id=@duplicate_id--@duplicate_id为重复值的id 

--模糊查询
select *  from product where detail like '%123.jpg%'
--替换字段里面部分内容
update product set detail=replace(cast(detail as varchar(8000)),'abc.jpg','efg.jpg') 

 

--SQL 替换掉 括号部分内容
select reverse(stuff(reverse(ServiceShopName), 1, charindex('(', reverse(ServiceShopName)), '')) from dbo.[签名] 

update dbo.签名 set ServiceShopName=reverse(stuff(reverse(ServiceShopName), 1, charindex('(', reverse(ServiceShopName)), ''))

select distinct('【'+ServiceShopName+'】') from dbo.签名

 

 

 

--查询逻辑顺序 (8) SELECT (9) DISTINCT (11) <TOP_specification><select_list> (1) FROM<left_table>(3) <join_type>JOIN<right_table> (2) ON<join_condition> (4) WHERE<where_condition> (5)GROUPBY<group_by_list> (6) WITH {CUBE | ROLLUP} (7) HAVING<having_condition> (10)ORDERBY<order_by_list>

 

 

 

金沙棋牌app手机下载 7

金沙棋牌app手机下载 8

(5) SELECT (5-2) DISTINCT (5-3) TOP(<top_specification>) (5-1) <select_list>
(1) FROM (1-J) <left_table> <join_type> JOIN <right_table> ON <on_predicate>
       | (1-A) <left_table> <apply_type> APPLY <right_table_expression> AS <alias>
       | (1-P) <left_table> PIVOT(<pivot_specification>) AS <alias>
       | (1-U) <left_table> UNPIVOT(<unpivot_specification>) AS <alias>
(2) WHERE <where_predicate>
(3) GROUP BY <group_by_specification>
(4) HAVING <having_predicate>
(6) ORDER BY <order_by_list>

金沙棋牌app手机下载 9

金沙棋牌app手机下载 10

 

金沙棋牌app手机下载 11

金沙棋牌app手机下载 12

 --存储过程 批量插入txt
 DECLARE @filepath NVARCHAR(200)
 SET @filepath = @path
 DECLARE @bulkinsert NVARCHAR(2000)
 SET @bulkinsert = N'BULK INSERT #PhoneData FROM ''' + @filepath
     + N''' WITH (FIELDTERMINATOR = '''', ROWTERMINATOR = ''n'')'
 CREATE TABLE #PhoneData ( phone VARCHAR(12) )
 EXEC sp_executesql @bulkinsert

金沙棋牌app手机下载 13

金沙棋牌app手机下载 14

 

--取到小數第二位四捨五入
SelectConvert(Numeric(20,2), IsNull(50.01634,0))
--50.02
SelectConvert(Numeric(20,2), IsNull(9,0))
--9.00

 

 

--日期转换参数,值得收藏
select CONVERT(varchar, getdate(), 120 )
2004-09-12 11:06:08 

select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')
20040912110608

select CONVERT(varchar(12) , getdate(), 111 )
2004/09/12

select CONVERT(varchar(12) , getdate(), 112 )
20040912

select CONVERT(varchar(12) , getdate(), 102 )
2004.09.12

 

--一个月第一天
SELECT   DATEADD(mm,   DATEDIFF(mm,0,getdate()),   0)  --  2009-06-01 00:00:00.000

--当天
select  * from product  where DateDiff(day,modiDate,GetDate())>1 

--如何查询本日、本月、本年的记录SQL
本年:
select * from loanInfo where year(date)=year(getdate()) 
本月:
select * from loanInfo where year(date)=year(getDate()) And month(date)=month(getdate()) 
本日:
select * from loanInfo where year(date)=year(getDate()) And month(date)=month(getdate()) and Day(date)=Day(getDate())   

昨天的记录:
datediff(day,[Datetime],getdate())=1  把Datetime换为你的相应字段,getdate()-Datetime即为时间差。
本月记录:
SELECT * FROM 表 WHERE datediff(month,[dateadd],getdate())=0
本周记录:
SELECT * FROM 表 WHERE datediff(week,[dateadd],getdate())=0
本日记录:
SELECT * FROM 表 WHERE datediff(day,[dateadd],getdate())=0

本周的星期一   SELECT  DATEADD(wk,  DATEDIFF(wk,0,getdate()),  0)  
 
一年的第一天  SELECT  DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0)  
 
季度的第一天   SELECT  DATEADD(qq,  DATEDIFF(qq,0,getdate()),  0)  
 
当天的半夜   SELECT  DATEADD(dd,  DATEDIFF(dd,0,getdate()),  0)  
 
上个月的最后一天 
 
       这是一个计算上个月最后一天的例子。它通过从一个月的最后一天这个例子上减去毫秒来获得。有一点要记住,在Sql  Server中时间是精确到毫秒。这就是为什么我需要减去毫秒来获得我要的日期和时间。 
 
       SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0))  
 
       计算出来的日期的时间部分包含了一个Sql  Server可以记录的一天的最后时刻(“:59:59:997”)的时间。 
 
去年的最后一天 
 
       连接上面的例子,为了要得到去年的最后一天,你需要在今年的第一天上减去毫秒。 
 
       SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0))  
 
本月的最后一天 
 
       现在,为了获得本月的最后一天,我需要稍微修改一下获得上个月的最后一天的语句。修改需要给用DATEDIFF比较当前日期和“-01-01”返回的时间间隔上加。通过加个月,我计算出下个月的第一天,然后减去毫秒,这样就计算出了这个月的最后一天。这是计算本月最后一天的SQL脚本。 
 
       SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(m,0,getdate())+1,  0))  
 
本年的最后一天 
 
       你现在应该掌握这个的做法,这是计算本年最后一天脚本 
 
       SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate())+1,  0))。 
 
本月的第一个星期一 
 
       好了,现在是最后一个例子。这里我要计算这个月的第一个星期一。这是计算的脚本。 
 
         select  DATEADD(wk,  DATEDIFF(wk,0,                                                          
                               dateadd(dd,6-datepart(day,getdate()),getdate())        
                                                                                                 ),  0)                          
 
       在这个例子里,我使用了“本周的星期一”的脚本,并作了一点点修改。修改的部分是把原来脚本中“getdate()”部分替换成计算本月的第天,在计算中用本月的第天来替换当前日期使得计算可以获得这个月的第一个星期一。 

--删除一个月前,三个月前, 6个月前,一年前的数据 

DELETE FROM 表名WHERE datediff(MM, AddTime,GETDATE()) > 1
DELETE FROM 表名WHERE datediff(MM, AddTime,GETDATE()) > 3
DELETE FROM 表名WHERE datediff(MM, AddTime,GETDATE()) > 6
DELETE FROM 表名WHERE datediff(YY, AddTime,GETDATE()) > 1

---------------------------------------------------------------  
附录,其他日期处理方法 
 
1)去掉时分秒 
declare  @  datetime  
set  @  =  getdate()  --'2003-7-1  10:00:00'  
SELECT  @,DATEADD(day,  DATEDIFF(day,0,@),  0)  
 
2)显示星期几 
select  datename(weekday,getdate())    
 
3)如何取得某个月的天数 
declare  @m  int  
set  @m=2  --月份 
select    datediff(day,'2003-'+cast(@m  as  varchar)+'-15'  ,'2003-'+cast(@m+1    as  varchar)+'-15')  

另外,取得本月天数 
select    datediff(day,cast(month(GetDate())  as  varchar)+'-'+cast(month(GetDate())  as  varchar)+'-15'  ,cast(month(GetDate())  as  varchar)+'-'+cast(month(GetDate())+1    as  varchar)+'-15')  

任意月份的最大天数
select  day(dateadd(dd,-1,dateadd(mm,1,Dateadd(mm,datediff(mm,0,getdate()),0)))) 

或者使用计算本月的最后一天的脚本,然后用DAY函数区最后一天 
SELECT  Day(dateadd(ms,-3,DATEADD(mm,  DATEDIFF(m,0,getdate())+1,  0)))  
 
4)判断是否闰年: 

SELECT  case  day(dateadd(mm,  2,  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0))))  when  28  then  '平年'  else  '闰年'  end  

或者 
select  case  datediff(day,datename(year,getdate())+'-02-01',dateadd(mm,1,datename(year,getdate())+'-02-01'))  
when  28  then  '平年'  else  '闰年'  end  
 
5)一个季度多少天 
declare  @m  tinyint,@time  smalldatetime  
select  @m=month(getdate())  
select  @m=case  when  @m  between  1  and  3  then  1  
                       when  @m  between  4  and  6  then  4  
                       when  @m  between  7  and  9  then  7  
                       else  10  end  
select  @time=datename(year,getdate())+'-'+convert(varchar(10),@m)+'-01'  
select  datediff(day,@time,dateadd(mm,3,@time))   

 

 1、确定某年某月有多少天

实现原理:先利用DATEDIFF取得当前月的第一天,再将月份加一取得下月第一天,然后减去分钟,再取日期的天数部分,即为当月最大日期,也即当月天数

CREATE FUNCTION DaysInMonth ( @date datetime ) Returns int
AS
BEGIN
 RETURN Day(dateadd(mi,-3,DATEADD(m, DATEDIFF(m,0,@date)+1,0)))
END

调用示例:

select dbo.DaysInMonth ('2006-02-03') 

(2)计算哪一天是本周的星期一

SELECT DATEADD(week, DATEDIFF(week,'1900-01-01',getdate()), '1900-01-01')  --返回-11-06 00:00:00.000

SELECT DATEADD(week, DATEDIFF(week,0,getdate()),0)      

(3)当前季度的第一天

SELECT DATEADD(quarter, DATEDIFF(quarter,0,getdate()), 0)—返回-10-01 00:00:00.000 

(4)一个季度多少天

declare @m tinyint,@time smalldatetime 

select @m=month(getdate()) 
select @m=case when @m between 1 and 3 then 1 
                       when @m between 4 and 6 then 4 
                       when @m between 7  and 9 then 7 
                       else 10 end 

select @time=datename(year,getdate())+'-'+convert(varchar(10),@m)+'-01' 
select datediff(day,@time,dateadd(mm,3,@time)) —返回

 

1.按姓氏笔画排序: 
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as 

2.分页SQL语句
select * from(select (row_number() OVER (ORDER BY tab.ID Desc)) as rownum,tab.* from 表名As tab) As t where rownum between 起始位置And 结束位置

8.如何修改数据库的名称:

sp_renamedb 'old_name', 'new_name' 

3.获取当前数据库中的所有用户表
select * from sysobjects where xtype='U' and category=0 

4.获取某一个表的所有字段
select name from syscolumns where id=object_id('表名') 

5.查看与某一个表相关的视图、存储过程、函数
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%' 

6.查看当前数据库中所有存储过程
select name as 存储过程名称from sysobjects where xtype='P' 

7.查询用户创建的所有数据库
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa') 
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01 

8.查询某一个表的字段和数据类型
select column_name,data_type from information_schema.columns where table_name = '表名' 

 

 

9.使用事务
在使用一些对数据库表的临时的SQL语句操作时,可以采用SQL SERVER事务处理,防止对数据操作后发现误操作问题

开始事务
Begin tran 
Insert Into TableName Values(…) 
SQL语句操作不正常,则回滚事务。

回滚事务
Rollback tran 
SQL语句操作正常,则提交事务,数据提交至数据库。

提交事务
Commit tran 

计算执行SQL语句查询时间

declare @d datetime 
set @d=getdate() 
select * from SYS_ColumnProperties select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate()) 

 

 

 

set statistics io on 

set statistics time on 

 

 

 

 

ALTERproc[dbo].[seequerytime]@sqlvarchar(max) asset nocount ondeclare@ddatetimeset@d=getdate()/*你的SQL脚本开始*/exec (@sql) /*你的SQL脚本结束*/declare@resultintselect@result=datediff(ms, @d,getdate()) select@resultprint@result 调用 exec[seequerytime]'select * from dbo.费用表 where 生成日期=''2008-12-09 00:00:00.000'''

 

 

【关闭SQL Server 数据库所有使用连接】

use  master 
go 
create  proc  KillSpByDbName(@dbname  varchar(20))  
as  
begin  
declare  @sql  nvarchar(500),@temp varchar(1000) 
declare  @spid  int  
set  @sql='declare  getspid  cursor  for    
select  spid  from  sysprocesses  where  dbid=db_id('''+@dbname+''')'  
exec  (@sql)  
open  getspid  
fetch  next  from  getspid  into  @spid  
while  @@fetch_status <>-1  
begin  
  set @temp='kill  '+rtrim(@spid) 
  exec(@temp) 
fetch  next  from  getspid  into  @spid  
end  
close  getspid  
deallocate  getspid  
end  

--举例使用,关闭数据库下的所有连接操作
Use  master  
Exec  KillSpByDbName  '数据库名称' 

(一)挂起操作
在安装Sql或sp补丁的时候系统提示之前有挂起的安装操作,要求重启,这里往往重启无用,解决办法:
到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Manager
删除PendingFileRenameOperations

(二)收缩数据库
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收缩数据和日志
DBCC SHRINKDB
DBCC SHRINKFILE

(三)压缩数据库
dbcc shrinkdatabase(dbname)

(四)转移数据库给新用户以已存在用户权限
exec sp_change_users_login update_one,newname,oldname
go

(五)检查备份集
RESTORE VERIFYONLY from disk=Evbbs.bak

(六)修复数据库
ALTER DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB(dvbbs,repair_allow_data_loss) WITH TABLOCK
GO
ALTER DATABASE [dvbbs] SET MULTI_USER
GO

金沙棋牌app手机下载 15

金沙棋牌app手机下载 16

--过滤关键词
declare @sql varchar(max)
set @sql = 
    ' select  Id, UserId, SendId, Phone, Message, 
       SentTime, CreateTime, BatchId,null Result1,CompanyID  from #tb 
 where 1=1 '                                
select @sql = @sql + '  and  [Message]  not    like  '       + '''' + '%' + Name + '%' + '''' from  ShieldWord 
where  1 = 1 
 --exec (@sql)

金沙棋牌app手机下载 17

金沙棋牌app手机下载 18

 

 

金沙棋牌app手机下载 19

金沙棋牌app手机下载 20

 --地址 加 市(没有就加,有则不改) 
update Business_Login
set
[Address] =CASE WHEN [Address]  LIKE '广州%' THEN [Address]  ELSE  '广州市'+ [Address] ENd 
where CityID=190 

--跨数据库更新表
update 
Business_Login 
set
Business_Login.[Address] = A.[Address] FROM  Yht.dbo.Business_Login A
where Business_Login.BusinessId= A.BusinessId
and Business_Login.CityID=190
and Business_Login.CityID=A.CityID

 

SELECT a.BusinessId,
       a.CityID,
       CASE 
            WHEN CHARINDEX(b.CityName, a.[Address]) = 0 THEN b.CityName + a.[Address]
            ELSE a.[Address]
       END AS ADDRESS
FROM   Business_Login a
       LEFT JOIN T_City b
            ON  b.CityID = a.CityID
--批量更新
update  a 
set
a.[Address] =CASE WHEN CHARINDEX(b.CityName, a.[Address]) = 0 THEN b.CityName + a.[Address] ELSE a.[Address] END
FROM Business_Login a, T_City b
          where  b.CityID = a.CityID

--Tag
update Business_Login
set
    Tag = A.CategoryName  from B_Category A 

where TypeId2=A.CategoryId 

 

金沙棋牌app手机下载 21

金沙棋牌app手机下载 22

 

--限制某ip一个小时内不能频繁操作
SELECT COUNT(1) AS num FROM PhoneVcode  
where datediff( s, CreateTime,getdate())>=1 AND datediff( s, CreateTime,getdate())<=3600

and Ip in (SELECT   Ip FROM PhoneVcode WHERE Ip='127.0.0.1' GROUP BY Ip   having count(Ip)>2)  

 

select top m * from tablename where id not in (select top n id from tablename) 

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

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

 

 

--Trim not removing spaces 不能去掉空白
-- 10- 换行, 13 - 回车, 32 - 空格 ,160 - 空格  
SELECT 
LTRIM(RTRIM(REPLACE(REPLACE(REPLACE([YourColumn], CHAR(10), CHAR(32)),
                                        CHAR(13), CHAR(32)), CHAR(160),
                                CHAR(32)))) AS [YourColumn] 
FROM [YourTable] 

复制表(只复制结构,源表名:a 新表名:b) (Access可用) 
法一:select * into b from a where 1 <>1 
法二:select top 0 * into b from a 

select * into SendBatch_DianXin from SendBatch  where 1=0

拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用) 
insert into b(a, b, c) select d,e,f from b; 

跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用) 
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’where 条件
例子:..from b in '"&Server.MapPath(".")&"data.mdb" &"' where.. 

子查询(表名:a 表名:b) 
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3) 

显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b 

外连接查询(表名:a 表名:b) 
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c 

在线视图查询(表名:a ) 
select * from (SELECT a,b,c FROM a) T where t.a > 1; 

between的用法,between限制查询数据范围时包括了边界值,not between不包括
select * from table1 where time between time1 and time2 
select a,b,c, from table1 where a not between 数值and 数值

in 的使用方法
select * from table1 where a [not] in (‘值’,’值’,’值’,’值’) 

两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 ) 

四表联查问题:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .. 

日程安排提前五分钟提醒
SQL: select * from 日程安排where datediff('minute',f开始时间,getdate())>5 

一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段from 表名order by 排序字段desc) a,表名b where b.主键字段= a.主键字段order by a.排序字段

选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) 
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b) 

包括所有在TableA 中但不在TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC) 

随机取出条数据
select top 10 * from tablename order by newid() 

随机选择记录
select newid() 

 

selectdistinct provincename ,newid() from City orderbynewid(),provincename

 

 

金沙棋牌app手机下载 23

金沙棋牌app手机下载 24

 --随机更新 n条 
UPDATE TOP(10) SEND
SET    Result3 = 0
FROM   SEND b
       JOIN (
                SELECT TOP 10 * 
                FROM   SEND
                WHERE  Result3 IS NULL
                       AND BatchID = '20101004093814'
                ORDER BY
                       NEWID()
            ) a
            ON  a.sendid = b.sendid   

金沙棋牌app手机下载 25

金沙棋牌app手机下载 26

 

金沙棋牌app手机下载 27

金沙棋牌app手机下载 28

--随机提取10个号码 获取城市 
CREATE procedure [dbo].[Applet_RandomTop10City](  
    @phones        nvarchar(max)   
)
as
begin
    declare @strphone nvarchar(max)
    set @strphone = @phones
    begin
        set arithabort on
    SELECT  B.phone ,
        ( SELECT    provincename + '-' + areaname  
          FROM      mobilearea
          WHERE     listid = LEFT(B.phone, 7)
        ) AS city
FROM    ( SELECT    [phone] = CONVERT(XML, '<root><v>' + REPLACE([phone], ',',
                                                              '</v><v>')
                    + '</v></root>')
          FROM      ( SELECT    '' + @strphone + '' AS [phone]
                    ) t
        ) A
        OUTER APPLY ( SELECT    phone = N.v.value('.', 'varchar(100)')
                      FROM      A.[phone].nodes('/root/v') N ( v )
                    ) B
    end
end

金沙棋牌app手机下载 29

金沙棋牌app手机下载 30

 

 

金沙棋牌app手机下载 31

金沙棋牌app手机下载 32

   declare @x xml
    select @x=cast('<A>'+replace(@Ids,',','</A><A>')+'</A>' as xml)     

    begin
    --插入
        INSERT dbo.tb
                select 111,t.value('.','int'),getdate()
                    from @x.nodes('/A') as x (t) 

金沙棋牌app手机下载 33

金沙棋牌app手机下载 34

 

 

 

 

金沙棋牌app手机下载 35

金沙棋牌app手机下载 36

Sql Server随机抽取数据效率优化 
Declare @d Datetime
Set @d=getdate()
SELECT Top 1* FROM [TGBus_Card].[dbo].[Ka_Card] 
WHERE 0.01 >= CAST(CHECKSUM(NEWID(), CardNo) & 0x7fffffff AS float) / CAST (0x7fffffff AS int)
And ActivityID = 501 And State = 0
Select [语句执行花费时间(毫秒)] = Datediff(ms,@d,Getdate())

--200w数据 就几毫秒 重复可能多 io消耗大  下面更加高效快速

金沙棋牌app手机下载 37

金沙棋牌app手机下载 38

 

金沙棋牌app手机下载 39

金沙棋牌app手机下载 40

--top 5 
  SET STATISTICS IO ON 
  SET STATISTICS TIME ON  
  SELECT   *    FROM news WHERE DocId=CEILING (rand()* ( SELECT  max(DocId)  FROM news  )-1) UNION all
  SELECT   *    FROM news WHERE DocId=CEILING (rand()* ( SELECT  max(DocId)  FROM news  )-1) UNION all
  SELECT   *    FROM news WHERE DocId=CEILING (rand()* ( SELECT  max(DocId)  FROM news  )-1) UNION all
  SELECT   *    FROM news WHERE DocId=CEILING (rand()* ( SELECT  max(DocId)  FROM news  )-1) UNION all
  SELECT   *    FROM news WHERE DocId=CEILING (rand()* ( SELECT  max(DocId)  FROM news  )-1) 

金沙棋牌app手机下载 41

金沙棋牌app手机下载 42

   

 

--效率提高几百倍 (号码前n位相同视为连续 数目小于3的) 
select a.* from 提取不连续号码 a
join (select left(phone,7) as p from 提取不连续号码 group by left(phone,7) having count(1)<3) b
on left(a.phone,7)=b.p 

金沙棋牌app手机下载 43

金沙棋牌app手机下载 44

 sql to c# linq 
var q = list.GroupBy(x => x.Substring(0, m))
    .Select(x => new { count = x.Count(), name = x.Key })
    .Where(x => x.count <= n)
    .ToList();
var query = from c in list
            join p in q on c.Substring(0, m) equals p.name 
        select c;  

金沙棋牌app手机下载 45

金沙棋牌app手机下载 46

  

金沙棋牌app手机下载 47

金沙棋牌app手机下载 48

--前后比较 

  
with t as
(select row_number() over(order by getdate()) rn,
left( phone,5) p,phone from tb
)
select a.rn,a.phone
from t a
left join t b on a.rn=b.rn+1
left join t c on a.rn=c.rn-1
where cast(a.p as int)-cast(b.p as int)<>0
and cast(a.p as int)-cast(c.p as int)<>0  

金沙棋牌app手机下载 49

金沙棋牌app手机下载 50

金沙棋牌app手机下载 51

金沙棋牌app手机下载 52

 sql to c# linq 
var q = list
    .Select((u, index) => new { phone = u,p=u.Substring(0,m), num = index+1})
    .ToList();
var query = from b in q
            join a in q on b.num equals a.num + 1
            join c in q on b.num equals c.num - 1
            where b.p.CompareTo( a.p)!=0  && b.p.CompareTo(c.p)!=0
            select new
            { b.phone
 };  

金沙棋牌app手机下载 53

金沙棋牌app手机下载 54

                

 

 

删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,) 

select distinct * into #Tmp from TB
drop table TB
select * into TB from #Tmp
drop table #Tmp

金沙棋牌app手机下载 55

金沙棋牌app手机下载 56

 ----每次按需要取14 电话号码跟消息相同的 每次取只取2条 先进先出原则 
SELECT  b.*
INTO    #tb
FROM    ( SELECT TOP 15
                    *
          FROM      ( SELECT    Id, UserId, SendId, Phone, Message, SendTime,
                                CreateTime, BatchId,
                                ROW_NUMBER() OVER ( PARTITION  BY [Message] ORDER BY [Message], Phone, CreateTime )
                                AS keyid
                      FROM      dbo.Send_Api
                    ) a
          WHERE     a.keyid < 3
        ) b

金沙棋牌app手机下载 57

金沙棋牌app手机下载 58

在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢?
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断   
select   *   from   people   
where   peopleId   in   (select     peopleId     from     people     group     by     peopleId     having     count(peopleId)   >   1)   
    
2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录   
delete   from   people     
where   peopleId     in   (select     peopleId     from   people     group     by     peopleId       having     count(peopleId)   >   1)   
and   rowid   not   in   (select   min(rowid)   from     people     group   by   peopleId     having   count(peopleId   )>1)   
    
3、查找表中多余的重复记录(多个字段)     
select   *   from   vitae   a   
where   (a.peopleId,a.seq)   in     (select   peopleId,seq   from   vitae   group   by   peopleId,seq     having   count(*)   >   1)   
    
4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录   
delete   from   vitae   a   
where   (a.peopleId,a.seq)   in     (select   peopleId,seq   from   vitae   group   by   peopleId,seq   having   count(*)   >   1)   
and   rowid   not   in   (select   min(rowid)   from   vitae   group   by   peopleId,seq   having   count(*)>1)   
    
5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录   
select   *   from   vitae   a   
where   (a.peopleId,a.seq)   in     (select   peopleId,seq   from   vitae   group   by   peopleId,seq   having   count(*)   >   1)   
and   rowid   not   in   (select   min(rowid)   from   vitae   group   by   peopleId,seq   having   count(*)>1) 

 

经典尝试 删除重复值

declare @table table (id int,name nvarchar(10))
insert into @table select 1,'aa'
union all select 1,'aa'
union all select 2,'bb'
union all select 3,'bb'
union all select 4,'cc'
union all select 1,'aa'
union all select 4,'cc'

delete a
from (
select id,name,rn = row_number() over (partition by id,name order by id) from @table 
) a where rn > 1

select * from @table 

id name


1 aa
2 bb
3 bb
4 cc

(4 row(s) affected)

 

金沙棋牌app手机下载 59

金沙棋牌app手机下载 60

--去重复 重复超过3个以上的保留前3个 不保留重复的顺序
SELECT *  
FROM  
(  
   SELECT rid=ROW_NUMBER() OVER(PARTITION BY phone ORDER BY id desc),*  
   FROM 去重复保留前三  
) AS T  
WHERE rid<=3
ORDER BY id 

金沙棋牌app手机下载 61

金沙棋牌app手机下载 62

金沙棋牌app手机下载 63

金沙棋牌app手机下载 64

--保留重复的顺序 
SELECT * FROM (  
SELECT TOP 100 PERCENT r=ROW_NUMBER() OVER( PARTITION BY T.phone ORDER BY t.rid ),T.*  
FROM  
(  SELECT rid=ROW_NUMBER() OVER(ORDER BY GETDATE() ),phone 
   FROM 去重复保留前三
   
) AS T ORDER BY T.rid 
) tb
WHERE tb.r<=3
ORDER BY tb.rid

金沙棋牌app手机下载 65

金沙棋牌app手机下载 66

 

金沙棋牌app手机下载 67

金沙棋牌app手机下载 68

// 去重复 顺序不变 保留n个
if (n == 1)
{
    IEnumerable<string> p = phones.Distinct();
    mobile = string.Join(",", p);
}
if (n > 1)
{
    var q = phones.Select((u, index) => new { phone = u, id = index + 1 }).ToList();
    var s = q.OrderBy(x => x.id).GroupBy(x => x.phone)
        .Select(g => new { g, count = g.Count() })
        .SelectMany(t => t.g.Select((j, i) => new { j.phone, j.id, rn = i + 1 }));
    var o = s.OrderBy(t => t.id).Select(t => t);
  List<string> list=new List<string>();
    foreach (var item in o)
    {
        if (item.rn <= n)
        {
            list.Add(item.phone);
        }
    }
    mobile = string.Join(",", list);
}

金沙棋牌app手机下载 69

金沙棋牌app手机下载 70

--float字段保留一位小数,四舍五入

SELECT CONVERT(DECIMAL(18,1),1024.791454) ------- 1024.8 (所影响的行数为1 行)
 <%# Eval("字段")==null?"":Eval("字段").toString("0.0") %>

 

金沙棋牌app手机下载 71

金沙棋牌app手机下载 72

--事务(进程 ID 77)与另一个进程被死锁在 锁 | 通信缓冲区 资源上,并且已被选作死锁牺牲品。请重新运行该事务。

--优先选择3,2,1

--1.表后面加
with (nolock)
--2.会话前面加 update的时候,能select
SET TRANSACTION ISOLATION LEVEL Read uncommitted 
--3.整个数据库隔离级别改为行版本
ALTER DATABASE SMMM SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE SMMM SET read_committed_snapshot ON --行版本隔离
ALTER DATABASE SMMM set MULTI_USER

金沙棋牌app手机下载 73

金沙棋牌app手机下载 74

 

金沙棋牌app手机下载 75

金沙棋牌app手机下载 76

select object_name(id) as 表名,
       rows as 使用行数,
       rtrim(8*reserved/1024)+'Mb' as 分配空间,
       rtrim(8*dpages/1024) as 使用空间,
       rtrim(8*(reserved-dpages)/1024) as 未使用空间,
       rtrim(8*dpages/1024-rows/1024*minlen/1024) as 空闲空间 
from sysindexes 
order by rows desc 

金沙棋牌app手机下载 77

金沙棋牌app手机下载 78

 

 

 金沙棋牌app手机下载 79

金沙棋牌app手机下载 80 

 

金沙棋牌app手机下载 81

 

 

 

--drop table t
--DELETE t

SQL 2008:
必須先將復原模式改為 "簡單" 才能清除,完成之後再將模式改回 "完整"
USE DBName
Alter Database DBName Set Recovery Simple DBCC SHRINKFILE(2,100) Alter Database DBName Set Recovery Full

 

转自:

 

 

SQL 2008 R2:
USE DBName;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE DBName
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 10 MB.
DBCC SHRINKFILE (2, 10);
GO
-- Reset the database recovery model.
ALTER DATABASE DBName
SET RECOVERY FULL;
GO
*上述 DBCC  SHRINKFILE (2, 10),2指的是LOG File, 10指的是壓到10MB哦!

select  t.*
from    t
join    (select name
         from   t
         group by name
         having count(name)>1
        ) a on T.NAME=a.name

  

 

--N到M条记录(要有主索引ID)
Select Top M-N * From 表Where ID in (Select Top M ID From 表) Order by ID  Desc

--SQL Server:
Select TOP N * From TABLE Order By NewID() 

 

--选择10从到15的记录
select top 5 * from (select top 15 * from table order by id asc) A  order by id desc 

 create table t (name varchar(20))

金沙棋牌app手机下载 82

SQL 7.0/2000:
BACKUP TRANSACTION DBName WITH TRUNCATE_ONLY DBCC SHRINKFILE(2,200)

 --号码相同 内容不同
select a.* from hebin4 a where exists(select 1 from hebin4 b where Phone=a.Phone and msg <>a.msg)  

selecttop<末端ID-顶端ID+1>*from<表名>where ID notin(selecttop<顶端ID-1>) ID from<表名>)

--最新发布的20条信息列表,要求包含:信息ID、信息标题、信息发布时间、信息发布人姓名、信息评论总数和最后评论时间,并且按最后评论时间排序SelectTop(100) a.infoID,a.infoTitle,a.infoPubDate,c.userName,Max( b.infoReplyDate ) As 最后时间,Count( b.infoReplyID ) As 评论总数 From info a LeftJoin[InfoReply] bOn a.infoID = b.infoID LeftJoin[User] c On a.infoPubUser = c.userNo And b.infoReplyUser =c.userNo GroupBy a.infoPubDate,a.infoID,a.infoTitle,c.userName OrderByMax( a.infoPubDate ) desc

--2.  join

金沙棋牌app手机下载 83

insert  into t
        select  '1'
        union all
        select  '2'
        union all
        select  '3'
        union all
        select  '5'
        union all
        select  '5'
        union all
        select  '5'
        union all
        select  '6'
        union all
        select  '3'
        union all
        select  '4'
 
/*  找出相同的 

金沙棋牌app手机下载 84

--开头到N条记录
Select Top N * From 表

--显示最后5条记录,但是显示的顺序必须为5,6,7,8,9,10,而不是10,9,8,7,6,5 如下解决方法:

  dump transaction CTC315 with no_log  
  DBCC SHRINKFILE ('CTC315_Log')

金沙棋牌app手机下载 85

 

金沙棋牌app手机下载 86

 

BULK INSERT B
FROM 'C:UserszengzhanDesktopB.txt'
WITH (
    FIELDTERMINATOR = '|',
    ROWTERMINATOR = 'n'
)
--927  

 清理日志:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
create procedure [dbo].[p清除日志]
@databasename varchar(100) -- 数据库名称
as
begin
 declare @execsql nvarchar(max), --  执行语句
  @logfilename varchar(100) -- 日志逻辑文件
 select @execsql='select @filename=name from  '+@databasename
  +'.dbo.[sysfiles]  where fileid=2' --  查询文件名
-- select 1,@execsql,@logfilename 
 exec sp_executesql @execsql,N'@filename varchar(100) output ',@logfilename output 
-- select 1,@logfilename
 select @execsql='use '+@databasename
  +'   dump transaction '+@databasename+'  with no_log  '
  +'  DBCC SHRINKFILE ('+@logfilename+') '  -- 清除脚本
-- select @execsql
 exec sp_executesql @execsql -- 清除
 
end
/*
exec [p清除日志] 'master'
*/

金沙棋牌app手机下载 87

金沙棋牌app手机下载 88

select top 5 from test where id in(select top 5 from test orderby id desc) orderby id asc 

-- 4.  2005  ROW_NUMBER()
select  t.*
from    t
join    (select *
         from   (select row_number() over (partition by NAME order by name) as id,
                        name
                 from   t
                ) a
         where  id=2
        ) b on t.NAME=b.name

金沙棋牌app手机下载 89

--通过这个问题也能总结出4-10条,5-100条这种限定一定范围内的sql语句的写法:

 

金沙棋牌app手机下载 90

金沙棋牌app手机下载 91

金沙棋牌app手机下载 92

select cast( (sum( case when id=2 then 1 else 0 end) +0.00)/Count(1) as decimal(18,2)) as 比例 from @rtb  
--大数据找差集
select t.ip into iptemp from (
SELECT b.ip FROM tb1  a  JOIN  tb2 b
on   b.num  between a.startnum and   a.endnum
) t
  
SELECT  ip FROM tb2 except
SELECT  ip FROM iptemp

金沙棋牌app手机下载 93

本文由金沙棋牌发布于金沙棋牌app手机下载,转载请注明出处:SQL经典短小代码收集,SQL计算上下两行某列的差

关键词: