求把一条数据拆成多条的函数

Edison621 2006-10-19 02:21:07
表 A:

id country
----------------------------
1 中国; 日本; 韩国
2 美国; 意大利; 法国
3 德国

拆分成:

id country
-----------------------------
1 中国
1 日本
1 韩国
2 美国
2 意大利
2 法国
3 德国
...全文
204 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Edison621 2006-10-20
  • 打赏
  • 举报
回复
这样做的意义是什么?要是表A中的ID号有大于8000的呢?
xyxfly 2006-10-20
  • 打赏
  • 举报
回复
要是表A中的ID号有大于8000的呢?
???


我晕,重要是方法,你可以变通啊,呵呵
斜杠青年小Q 2006-10-19
  • 打赏
  • 举报
回复
SELECT TOP 8000 id = identity(int,1,1)
INTO # FROM syscolumns a, syscolumns b

什么意思啊?
保证有8000条数据,没有其他意思。
xyxfly 2006-10-19
  • 打赏
  • 举报
回复
看看这个帖子
http://community.csdn.net/Expert/topic/5033/5033176.xml?temp=.8092157
xyxfly 2006-10-19
  • 打赏
  • 举报
回复
SELECT TOP 8000 id = identity(int,1,1)
INTO # FROM syscolumns a, syscolumns b

什么意思啊?


直接在查询分析器中执行这条语句
再select * from #
就知道了

这里产生一个临时表#
数据为
1
2
3
...
Well 2006-10-19
  • 打赏
  • 举报
回复

--创建测试
create table #tb (id int,country varchar(100))
insert into #tb
select 1,'中国;日本;韩国' union all
select 2,'美国;意大利;法国' union all
select 3,'德国'

---------------------
--测试方法
SELECT TOP 4000
id = identity(int,1,1)
INTO #Temp
FROM syscolumns a, syscolumns b --这里什么意思?

SELECT A.id, country = SUBSTRING(A.country, B.ID, CHARINDEX(';', A.country + ';', B.ID) - B.ID)
FROM #tb A, #Temp B
WHERE SUBSTRING(';' + a.country, B.id, 1) = ';' --此方法好
order by a.id
--测试结果
/*
id country
1 中国
1 日本
1 韩国
2 美国
2 意大利
2 法国
3 德国
*/
--删除测试环境
drop table #Temp
drop table #tb
Edison621 2006-10-19
  • 打赏
  • 举报
回复
SELECT TOP 8000 id = identity(int,1,1)
INTO # FROM syscolumns a, syscolumns b

什么意思啊?
Edison621 2006-10-19
  • 打赏
  • 举报
回复
能写成一个函数么?
dawugui 2006-10-19
  • 打赏
  • 举报
回复
楼上正解
九斤半 2006-10-19
  • 打赏
  • 举报
回复
即:

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,#
九斤半 2006-10-19
  • 打赏
  • 举报
回复
参考:

create table tblTest(PdID int,PdName varchar(100))

insert tblTest
select 1,'A10' union all
select 2,'A20,A20S' union all
select 3,'A30,A30K,A30M' union all
select 4,'A301' union all
select 5,'A301M'
select * from tblTest
go

-- 建立一个辅助的临时表就可以了
SELECT TOP 8000
id = identity(int,1,1)
INTO # FROM syscolumns a, syscolumns b
-- 这个辅助表是什么含义,为下一步铺垫的目的是什么?
-- 以上生成一个临时表

SELECT
A.PdID,
PdName = SUBSTRING(A.PdName, B.ID, CHARINDEX(',', A.PdName + ',', B.ID) - B.ID) --这个SUBSTRING在B.ID每一次执行的时候的值是多少?
FROM tblTest A, # B
WHERE SUBSTRING(',' + a.PdName, B.id, 1) = ',' --这个where后面的检索条件又代表什么含义?
ORDER BY 1,2
GO

DROP TABLE tblTest, #

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧