表 A:id          country
----------------------------
1           中国; 日本; 韩国
2           美国; 意大利; 法国
3           德国拆分成:id          country
-----------------------------
1           中国
1           日本
1           韩国
2           美国
2           意大利
2           法国
3           德国

解决方案 »

  1.   

    参考: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
    GODROP TABLE tblTest, #
      

  2.   

    即: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,#
      

  3.   

    SELECT TOP 8000 id = identity(int,1,1) 
    INTO # FROM syscolumns a, syscolumns b   什么意思啊?
      

  4.   


    --创建测试
    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
      

  5.   

    SELECT TOP 8000 id = identity(int,1,1) 
    INTO # FROM syscolumns a, syscolumns b   什么意思啊?
    直接在查询分析器中执行这条语句
    再select * from #
    就知道了这里产生一个临时表#
    数据为
    1
    2
    3
    ...
      

  6.   

    看看这个帖子
    http://community.csdn.net/Expert/topic/5033/5033176.xml?temp=.8092157
      

  7.   

    SELECT TOP 8000 id = identity(int,1,1)
    INTO # FROM syscolumns a, syscolumns b什么意思啊?
    保证有8000条数据,没有其他意思。
      

  8.   

    这样做的意义是什么?要是表A中的ID号有大于8000的呢?
      

  9.   

    要是表A中的ID号有大于8000的呢?
    ???
    我晕,重要是方法,你可以变通啊,呵呵