百分求一SQL语句解决思路
发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
百分求一SQL语句
将下面的表结构
tableA
---------------------------
新闻id 股票id
---------------------------
3456 601988,600028,HK3988,HK0386
3457 601988,600028
如何转换为下面的结构
tableB
--------------------------
新闻id 股票id
--------------------------
3456 601988
3456 600028
3456 HK3988
3456 HK0386
3457 601988
3457 600028
----------------------------------
用一个或者多个SQL语句,但是不要使用游标,因为数据量太大
------解决方案--------------------
--参考
CREATE TABLE A(id INT,country VARCHAR(100))
INSERT A
SELECT 1, '中国;日本;韩国 ' UNION ALL
SELECT 2, '美国;意大利;法国 ' UNION ALL
SELECT 3, '德国 '
SELECT * FROM A
-- 建立一个辅助的临时表就可以了
SELECT TOP 8000 id = identity(int,1,1)
INTO # FROM syscolumns a, syscolumns b
SELECT
A.ID,
COUNTRY = SUBSTRING(A.COUNTRY, B.ID, CHARINDEX( '; ', A.COUNTRY + '; ', B.ID) - B.ID)
FROM A, # B
WHERE SUBSTRING( '; ' + a.COUNTRY, B.id, 1) = '; '
ORDER BY 1,2
GO
DROP TABLE A,#
id country
----------- ----------------------------------------------------------------
1 中国;日本;韩国
2 美国;意大利;法国
3 德国
(所影响的行数为 3 行)
ID COUNTRY
----------- ----------------------------------------------------------------
1 韩国
1 日本
1 中国
2 法国
2 美国
2 意大利
3 德国
(所影响的行数为 7 行)
------解决方案--------------------
create table A(col1 int, col2 varchar(100))
insert A select 3456, '601988,600028,HK3988,HK0386 '
union all select 3457, '601988,600028 '
select top 8000 ID=identity(int, 1, 1) into #T from sysobjects, syscolumns
select col1, col2=cast(substring(A.col2, B.ID, charindex( ', ', A.col2+ ', ', B.ID)-B.ID) as varchar(20))
from A as A, #T as B
where B.ID <=len(A.col2) and charindex( ', ', ', '+A.col2, B.ID)=B.ID
order by col1
--result
col1 col2
----------- --------------------
3456 601988
3456 600028
3456 HK3988
3456 HK0386
3457 600028
3457 601988
(6 row(s) affected)
------解决方案--------------------
SELECT TOP 8000 id = identity(int,1,1) INTO # FROM syscolumns a, syscolumns b
生成的这个临时表是用于循环的,可以把这种算法看做是一种特殊循环,这种循环不是通过WHILE循环而是通过临时表的ID与字符串中逗号出现的次序进行关联来实现循环.
------解决方案--------------------
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
从 Excel 导入到 SQL 的大数据效率问题
导入数据量:10W。
环境:Sql server 2008 R2
导入用时 29分钟。
每条执行语句:
IF EXIS...
-
链接服务器 删除时,提示 提供程序内存不足
链接服务器连一个oracle 数据库
表 tb 其中一个列是 blob
现在删除 tb 的一行...
-
一个简单的存储过程报错,求大神指教
--Drop PROCEDURE [dbo].[FenYe]
CREATE PROCEDURE [dbo].[FenYe]
@curPage int, --当...
-
如何在调试时清除临时表
用临时表时碰到错误
Msg 2714, Level 16, State 6, Line 3
There is already an object named '#TblPr...
-
还原数据库时,出现怪事了....
我用的SQL的版本是 Microsoft Corporation 版本8.0
企业管理器---找到相应的数据库名---右键---...
-
动态列!急!
下面的存储是我举例子的,并不正确!我想实现当我输入参数,2012,1,2012,12 的时候,Ytd就
得到那参数区间的和,问题就在,如...
-
为庆祝PASS北京分会成立,12月份在微软中国举办第一次线下活动。欢迎报名!
The Professional Association for SQL Server (简称PASS...
-
关于数据分页问题。
朋友说,微软自带的ListView数据分页不能使用,效率太低,查询要把整个数据库查一遍,说是要Row_Number。
那么Row_N...
-
sql查询优化
表 table 有24个字段,3万条数据,现在我查询该表的所有数据
select * from table order by id
查询时间在1分20秒左右...
-
sql 多张表的列合并成一条数据
比如
A表 有下列
name stock(库存)
苹果 10
香蕉 20
B表
name import(入库)
苹果...