群内问题收集
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
之前有遇到类似解决方案的例子

--求出累计成交金额大于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
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
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
使用过滤索引+唯一索引完美解决
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
是这种情况,只查询一个表,只有 and 条件,如 where a=3 and b=5,a 和b都用索引,但是2个索引的第一列却不是a或b。
个人理解:优化器认为从两个索引中扫描获取数据比从基础表中开销低了
|
【作者】: 醒嘞 |
【出处】: http://www.cnblogs.com/Uest/ | |
【声明】: 本文内容仅代表个人观点。如需转载请保留此段声明,且在文章页面明显位置给出原文链接! |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?