SQL Server 2008 R2——使用数字辅助表(master..spt_values)实现用计数字段对记录进行重复显示

原文:SQL Server 2008 R2——使用数字辅助表(master..spt_values)实现用计数字段对记录进行重复显示

=================================版权声明=================================

版权声明:原创文章 谢绝转载 

请通过右侧公告中的“联系邮箱(wlsandwho@foxmail.com)”联系我

勿用于学术性引用。

勿用于商业出版、商业印刷、商业引用以及其他商业用途。                   

 

本文不定期修正完善。

本文链接:http://www.cnblogs.com/wlsandwho/p/5075789.html

耻辱墙:http://www.cnblogs.com/wlsandwho/p/4206472.html

=======================================================================

没啥说的,鄙视那些无视版权随意抓取博文的爬虫小网站站长,圣诞了,祝你们见到上帝。

=======================================================================

=======================================================================

从来只见过有人要用distinct去重,可没听说过谁还要生成重复数据的。今儿咱算是开了眼了。

上代码吧。

 1 --by WLS
 2 --20151224
 3 --网络代码有风险复制粘贴须谨慎
 4 USE tempdb
 5 GO
 6
 7 IF OBJECT_ID (N't_TestbyWLS', N'U') IS NOT NULL
 8 DROP TABLE t_TestbyWLS;
 9 CREATE TABLE t_TestbyWLS(Id INTEGER PRIMARY KEY,Name NVARCHAR(15),Qty INTEGER)
10 GO
11
12 INSERT INTO t_TestbyWLS VALUES
13 (1,'thbytwo',3),
14 (2,'wlsandwho',2)
15 GO
16
17 SELECT * FROM t_TestbyWLS
18 GO
19
20 -------------------------------------------------------------------------------------------
21 WITH TempQty
22 AS
23 (
24     SELECT number AS Num FROM master..spt_values WHERE type='p'
25 )
26 SELECT a.Id,a.Qty FROM t_TestbyWLS a LEFT JOIN TempQty b ON b.Num>0 AND b.Num<=a.Qty
27 GO

分步思路

 1 -------------------------------------------------------------------------------------------
 2 --step0
 3 SELECT number AS Num FROM master..spt_values WHERE type='p'
 4 GO
 5 --step1
 6 WITH TempQty
 7 AS
 8 (
 9     SELECT number AS Num FROM master..spt_values WHERE type='p'
10 )
11 SELECT a.Id,a.Qty,b.Num FROM t_TestbyWLS a LEFT JOIN TempQty b ON 1=1
12 --step2
13 WITH TempQty
14 AS
15 (
16     SELECT number AS Num FROM master..spt_values WHERE type='p'
17 )
18 SELECT a.Id,a.Qty,b.Num FROM t_TestbyWLS a LEFT JOIN TempQty b ON 1=1 AND b.Num>0 AND b.Num<=a.Qty
19 --step3
20 WITH TempQty
21 AS
22 (
23     SELECT number AS Num FROM master..spt_values WHERE type='p'
24 )
25 SELECT a.Id,a.Qty FROM t_TestbyWLS a LEFT JOIN TempQty b ON b.Num>0 AND b.Num<=a.Qty
26 GO

执行结果

执行计划

=======================================================================

本着从业务出发的原则,我问了下事主为何有这种浪(wéi)费(bèi)空(lì)间(shǐ)、低(bù)效(rén )率(dào )、违(pò)反(huài)数(rì)据(nèi)库(wǎ)范(tiáo)式(yuē)的需求,

下面是问答截图。

看来是软件架构设计的问题了,不予置评。

=======================================================================

(友情支持请扫描这个)

微信扫描上方二维码捐赠

 

时间: 2024-11-01 02:46:18

SQL Server 2008 R2——使用数字辅助表(master..spt_values)实现用计数字段对记录进行重复显示的相关文章

SQL Server 2008 R2中,变表的右键弹出菜单中的“选择前1000行”为“选择所有行”

原文:SQL Server 2008 R2中,变表的右键弹出菜单中的"选择前1000行"为"选择所有行" 从SQL Server 2008开始,微软为了提高查询效率等原因,右键点击表时弹出菜单中默认没有"显示所有行",而以"选择前1000行"替代.这有时会为我们带来一些不便. 更改方法是:打开SQL Server Management Studio,依次点击"工具"菜单."选项",展开左

SQL Server 2008 R2主数据服务安装

SQL Server 2008 R2的主数据服务(Master Data Services,简称MDS)已经放出,目前是CTP版本,微软提供了下载地址: http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=fe0c6a31-5ad6-4eea-a865-73bbe2608bd1 在下载页面中提供了SQL2008R2的安装试用,一个是DVD的文件,另外是自解压文件:第3个下载就是主数据服务的自解压文件

详解SQL SERVER 2008 R2主数据管理

SQLSERVER 2008R2中提供了主数据服务.很多人对主数据服务比较陌生.我们先介绍主数据服务的应用范畴. 主数据服务是当企业的规模达到一定的规模后,因企业信息化战略发展的需要.需要将企业内信息进行统一规划.形成制定统一的标准.建立一套统一的公共数据标准及维护体系.一个统一的公共数据平台.使其各子系统均按照统一的标准使用公共数据.使企业在信息化形成一个整体.有一个统一的标准.根据企业http://www.aliyun.com/zixun/aggregation/9069.html">

SQL Server 2008 R2——使用FULL OUTER JOIN实现多表信息汇总

原文:SQL Server 2008 R2--使用FULL OUTER JOIN实现多表信息汇总 =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的"联系邮箱(wlsandwho@foxmail.com)"联系我 勿用于学术性引用. 勿用于商业出版.商业印刷.商业引用以及其他商业用途.       本文不定期修正完善. 本文链接:http://w

同时查询一张表-sql server 2008 r2 出现死锁问题

问题描述 sql server 2008 r2 出现死锁问题 程序每3秒钟查询一次,跑一会会出现这种死锁的问题,求助各位大神. 解决方案 SQL Server 2008 R2 安装问题SQL Server 2008 R2 死锁监控SQL Server 2008 R2 安装过程 解决方案二: 死锁频繁出现基本上是程序写的有问题. 建议:查看引起死锁的进程信息 引入事务管理 解决方案三: 插入数据和删除数据都是独占锁,如果要大数据查询可以加 with (nolock) 来取消独占锁.大量数据插入和删

让SQL Server 2008 R2在查询时输出信息

环境:SQLServer 2008 R2 问题:在查询时输出信息 解决: 一:使用print函数. 如: print 'HelloWorld'; 当然,print函数不仅能够打印字符串,还可以打印整型数据或者浮点型数据. 如: print 27; print 39.27; print 0.11111111111111111111; 二:变通的方法,通过系统表查询获得输出信息. select * from sysobjects; select 'HelloWorld' from sysobject

安装SQL Server 2008 R2和Visual Studio 2010时的1406错误解决

问题描述:重新安装的系统,然后马上升级到Windows7旗舰版,在安装SQL Server 2008 R2和Visual Studio 2010时遇到1406错误.尝试了很多方法,比如修改对应注册表的权限.重置注册表.安装更新等等. 又细想是否是系统的原因,于是又重新还原系统,保持Windows7家庭普通版.后来又考虑了许久,才想到解决 办法.其实很简单,稍后奉上. 问题如图: SQL Server 2008 R2安装错误: Visual Studio 2010旗舰版安装错误: 解决: 没有足够

SQL Server 2008 R2 性能计数器详细列表(三)

原文:SQL Server 2008 R2 性能计数器详细列表(三) SQL Server,Deprecated Features 对象: 监视指定为不推荐使用的功能: SQL Server Deprecated Features 计数器实例 说明 "#"和"##"作为临时表和存储过程的名称 遇到不包含 # 以外的任何字符的标识符.请至少使用一个其他字符.每次编译时发生. "::"函数调用语法 表值函数遇到 :: 函数调用语法.请替换为 SELE

sql点滴38—SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同

原文:sql点滴38-SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同 说明:       以前要将一个表中的数据导出为脚本,只有用存储过程.现在在SQL Server 2008中增加了一个新特性,除了导出表的定义外,还支持将表中的数据导出为脚本. 步骤:     右击需要导出数据的数据库,在弹出式菜单中选择"任务"下的"生成脚本"选项      在第二步选择"高级选项"如果不是2008(R2)的选择 &