• 群内问题收集


    12:38 2014/3/9 SQL Server技术交流(213291913)
    有没有遇到这样的问题

    表格2是结果,产品的汇总是类型不定的,有可能是'ABC','BC','D'多种可能都有,如何写SQL语句
    我想到就是用游标,然后根据结果一条一条匹配。在表格1中增加一个汇总列,最后汇总成表2的样子。
    有没有更好的方法呢?
    下面是群友给出的答案

     1 declare @temp table(产品 varchar(10),年 int,月 int,销量 int)
     2 insert into @temp(产品,年,月,销量)
     3 values('A',2013,1,23),
     4 ('B',2013,1,1),
     5 ('C',2013,1,23),
     6 ('D',2013,1,3),
     7 ('D',2013,2,8)
     8 declare @temp1 table(产品 varchar(10),年 int,月 int,销量 int)
     9 insert into @temp1(产品,年,月)
    10 values('ABC',2013,1),
    11 ('AB',2013,1),
    12 ('ABD',2013,1),
    13 ('BCD',2013,1),
    14 ('CD',2013,2)
    15 update @temp1 set 销量=(
    16 select sum(销量) from @temp a 
    17 where charindex(a.产品,b.产品)>0 and a.年=b.年 and a.月=b.月)
    18 from @temp1 b
    19 select * from @temp
    20 select * from @temp1
    View Code

    之前有遇到类似解决方案的例子

    --求出累计成交金额大于1000的那个日期
    create table test1(createtime varchar (8),je int)
    insert into test1 values('20130801',200)
    insert into test1 values('20130806',300)
    insert into test1 values('20130810',500)
    insert into test1 values('20130816',250)
    insert into test1 values('20130820',250)
    select createtime,je,(select sum(je) from test1 where createtime<=a.createtime) zj
    from test1 a
    View Code

    11:15 2015/2/27 count(column)会忽略value为null的记录;*是常量,永远不为NULL,其他列有可能为NULL的就计算非NULL列,count(*)返回表中所有记录数。
    --分批删除

    --分批删除
    WHILE (1=1)
    BEGIN
        DELETE TOP(10000) [dbo].[MultiRoom_UserOnlineTime]
               --OUTPUT DELETED.*
               --INTO [dbo].[MultiRoom_UserOnlineTime_Old]
        WHERE  [starttime]<CONVERT(VARCHAR(10) ,DATEADD(DAY ,-10 ,GETDATE()) ,120)   
        
        IF @@ROWCOUNT=0
            BREAK
        
        WAITFOR DELAY '00:00:03'
    END
    GO
    View Code

    10:39 2017/3/4
    想在表上建这样一个check约束,table(userid,username,ttype,addtime)当ttype=2时,userid 或 username不能重复

    USE Test
    GO
    --create table
    CREATE TABLE TestWhereUnique(userid int,username VARCHAR(10),ttype TINYINT,addtime DATETIME)
    --create Filtered Indexes
    CREATE UNIQUE INDEX IX_userid ON TestWhereUnique(userid) WHERE ttype=2
    CREATE UNIQUE INDEX IX_username ON TestWhereUnique(username) WHERE ttype=2
    
    INSERT INTO TestWhereUnique(userid,username,ttype,addtime) VALUES (1,'a',1,GETDATE())
    INSERT INTO TestWhereUnique(userid,username,ttype,addtime) VALUES (1,'a',2,GETDATE())
    INSERT INTO TestWhereUnique(userid,username,ttype,addtime) VALUES (1,'ab',2,GETDATE())
    INSERT INTO TestWhereUnique(userid,username,ttype,addtime) VALUES (2,'c',1,GETDATE())
    INSERT INTO TestWhereUnique(userid,username,ttype,addtime) VALUES (3,'c',2,GETDATE())
    INSERT INTO TestWhereUnique(userid,username,ttype,addtime) VALUES (4,'c',2,GETDATE())
    
    SELECT * FROM TestWhereUnique
    --Clean up
    --DROP TABLE TestWhereUnique
    View Code



    使用过滤索引+唯一索引完美解决
    17:56 2017/4/5
    select一张表可以使用两个索引吗?(不包含键查找这种)

    /**** select一张表可以使用两个索引吗?(不包含键查找这种) ****/
    select * 
    into Test.dbo.SalesOrderDetail
    from AdventureWorks2008.Sales.SalesOrderDetail
    
    create clustered index CIX_SalesOrderDetailID on Test.dbo.SalesOrderDetail(SalesOrderDetailID)
    create index IX_SalesOrderID on Test.dbo.SalesOrderDetail(SalesOrderID)
    create index IX_LineTotal on Test.dbo.SalesOrderDetail(LineTotal)
    
    set statistics profile on
    dbcc FREEPROCCACHE
    select * from Test.dbo.SalesOrderDetail
    where SalesOrderID=43659
    and LineTotal=2024.994000
    set statistics profile off
    
    drop table Test.dbo.SalesOrderDetail
    View Code


    是这种情况,只查询一个表,只有 and 条件,如 where a=3 and b=5,a 和b都用索引,但是2个索引的第一列却不是a或b。
    个人理解:优化器认为从两个索引中扫描获取数据比从基础表中开销低了

  • 相关阅读:
    【SSH网上商城项目实战25】使用java email给用户发送邮件
    14个Xcode中常用的快捷键操作
    图文解释XCode常用快捷键的使用
    **iOS开发系列--IOS程序开发概览
    IOS:类方法(静态方法)和实例方法
    IOS:利用dispatch_once创建单例
    ios 沙盒 NSCoding(相当于JAVA对象序列化) 归档 数据存储
    NSString+URLEncoding.h --使用Obj-C对数据等进行URLEncoding编码
    iOS开发网络篇—NSURLConnection基本使用
    Block、委托、回调函数原理剖析(在Object C语境)——这样讲还不懂,根本不可能!
  • 原文地址:https://www.cnblogs.com/Uest/p/3591494.html
Copyright © 2020-2023  润新知