老问题,新难处,一个字段拆分成多个字段的疑难杂症求救!

时间:2022-04-08 15:08:42
之前提过问题,是BULK INSERT字段的问题,后来发现.csv的问题,但是要打开保存后 才能导入。
现在是.bat不好做,所以转字段拆分。

问题:
字段'zt'随着数据内容的不停删除插入有增有减,但是格式基本相同。如下:
内容:
"状态" "1000107917101001";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"押出胶水";120;0;"延迟" "1000107917101002";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"复押胶水";240;0;"延迟" "1000004317101101";"贵州省化工研究院";17/10/11;"15:00";?;"";"植绒胶水";240;0;"延迟";3000;0;"计划" 

总共需要将‘zt’拆分为10个字段
"1000107917101001";   "广州泉铭贸易有限公司";  17/10/10;   "15:00";   ?;   "";   "押出胶水"   ;120;  0 ;  "延迟"
"1000107917101002";  "广州泉铭贸易有限公司";   17/10/10;   "15:00";   ?;   "";   "复押胶水"   ;240;  0;   "延迟"
"1000004317101101";   "贵州省化工研究院";          17/10/11;    "15:00";   ?;  "";   "植绒胶水"    ;240;   0;   "延迟";
以;分截断。
——————————————————————————————————————————————
问题是内容不是固定的,有时候100行,有时候20行。
求语句与思路,谢谢!

22 个解决方案

#1


你是想通过
"状态" "1000107917101001";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"押出胶水";120;0;"延迟" "1000107917101002";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"复押胶水";240;0;"延迟" "1000004317101101";"贵州省化工研究院";17/10/11;"15:00";?;"";"植绒胶水";240;0;"延迟";3000;0;"计划"
得到下面这样的结果吗?
老问题,新难处,一个字段拆分成多个字段的疑难杂症求救!
是的话用下面的代码就可以了

--测试数据
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)
)
INSERT INTO #tab VALUES ( '"状态" "1000107917101001";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"押出胶水";120;0;"延迟" "1000107917101002";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"复押胶水";240;0;"延迟" "1000004317101101";"贵州省化工研究院";17/10/11;"15:00";?;"";"植绒胶水";240;0;"延迟";3000;0;"计划"')
--测试数据结束

IF OBJECT_ID('tempdb..#t') Is NOT NULL
DROP TABLE #t
SELECT b.id AS title,IDENTITY(INT,1,1) AS rn into #t FROM #tab a
OUTER APPLY dbo.ufn_SplitStringToTable(a.id,' ') b

IF OBJECT_ID('tempdb..#t2') Is NOT NULL
DROP TABLE #t2
;WITH cte AS (
SELECT title,b.id, rn,ROW_NUMBER() OVER( partition by rn ORDER BY title) AS num FROM #t a
OUTER APPLY dbo.ufn_SplitStringToTable(replace(a.title,'"',''),';') b
WHERE rn<>1
)
SELECT rn,num,id into #t2 FROM cte WHERE num BETWEEN 1 AND 10

DECLARE @name VARCHAR(max),@sql VARCHAR(max)
set @name =stuff((SELECT DISTINCT ',['+cast(num AS VARCHAR(20))+']'  from #t2  for xml PATH('')),1,1,'')
PRINT @name
set @sql ='SELECT [1],[2],[3],[4],[5],[6],[7],[8],[9],[10] from #t2 pivot(max(id)for num in('+@name+'))a'
PRINT @sql
EXEC( @sql)

#2



CREATE FUNCTION [dbo].[ufn_SplitStringToTable]
(
  @str VARCHAR(MAX) ,
  @split VARCHAR(10)
)
RETURNS TABLE
    AS 
RETURN
    ( SELECT    B.id
      FROM      ( SELECT    [value] = CONVERT(XML , '<v>' + REPLACE(@str , @split , '</v><v>')
                            + '</v>')
                ) A
      OUTER APPLY ( SELECT  id = N.v.value('.' , 'varchar(100)')
                    FROM    A.[value].nodes('/v') N ( v )
                  ) B
    )

首先得创建这个函数上面语句才可以调用这个函数达到效果

#3


你先把数据导入一个中间表,然后对中间表进行处理,处理成功后再导入最终表。你也可以考虑在中间表上加触发器,通过触发器触发插入最终表。



with cte1
as
(SELECT REPLACE(REPLACE(REPLACE(content,'"状态" ',''),' ',';'),'"','') as content_new FROM 中间表),

cte2
as
(select A.*,b.number,
SUBSTRING(content_new,number,CHARINDEX(';',content_new+';',number)-number) as single_item,
((ROW_NUMBER() over (order by number)-1)/10) as group_seq
from cte1 A
join master..spt_values B on CHARINDEX(';',';'+content_new,number)=number 
where type='P'),

cte3
as
(select *,COUNT(1) over (partition by group_seq) as count_by_item,
 ROW_NUMBER() over (PARTITION by group_seq order by number) as single_seq from cte2)

select [1],[2],[3],[4],[5],[6],[7],[8],[9],[10]
from (select group_seq,single_item,count_by_item,single_seq from cte3) as A
pivot (max(single_item) for single_seq in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10])) as B
where count_by_item=10 --如果导入的数据最终拆分的字段数目始终是10的整数倍,或者一条记录不满10个字段也进行插入,那可以忽略这一条件.

#4


[code=sql]
--测试数据
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)
)
INSERT INTO #tab VALUES ( '"状态" "1000107917101001";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"押出胶水";120;0;"延迟" "1000107917101002";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"复押胶水";240;0;"延迟" "1000004317101101";"贵州省化工研究院";17/10/11;"15:00";?;"";"植绒胶水";240;0;"延迟";3000;0;"计划"')
--测试数据结束
---------------------------------------------------------------这个地方是 select zt from [表] 如何体现?

#5


引用 4 楼 yang98226 的回复:
[code=sql]
--测试数据
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)
)
INSERT INTO #tab VALUES ( '"状态" "1000107917101001";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"押出胶水";120;0;"延迟" "1000107917101002";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"复押胶水";240;0;"延迟" "1000004317101101";"贵州省化工研究院";17/10/11;"15:00";?;"";"植绒胶水";240;0;"延迟";3000;0;"计划"')
--测试数据结束
---------------------------------------------------------------这个地方是 select zt from [表] 如何体现?

直接
INSERT INTO #tab
select zt from [表]
然后执行上面的代码就ok了,等于把你现在的表里zt的内容插入临时表#tab中了

#6


用bat打开保存,依然不会保存成,标准csv文件。因为dos命令或者任何脚本命令打开方式基本都是数据流方式,保存也是数据流保存。想保存成最标准的csv文件,要安装office,用vba开发最简单;用.net平台的话,用office的com组件开发也行。都能打开标准的excel程序,保存动作,就相当于你手动打开excel并保存。

#7


引用 4 楼 yang98226 的回复:
[code=sql]
--测试数据
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)
)
INSERT INTO #tab VALUES ( '"状态" "1000107917101001";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"押出胶水";120;0;"延迟" "1000107917101002";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"复押胶水";240;0;"延迟" "1000004317101101";"贵州省化工研究院";17/10/11;"15:00";?;"";"植绒胶水";240;0;"延迟";3000;0;"计划"')
--测试数据结束
---------------------------------------------------------------这个地方是 select zt from [表] 如何体现?



如果直接select zt 表,大概80行的数据,直接这样的结果。
SHORE NULL NULL NULL NULL NULL NULL NULL NULL NULL
A NULL NULL NULL NULL NULL NULL NULL NULL NULL
70 500 0 延迟 1000000717102001 中广核三角洲集团(苏州)特威塑 17/10/20 15:00 ? TPO


感觉这样有点小问题的啊

#8


IF OBJECT_ID('tempdb..#tab') Is NOT NULL
DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)
)
INSERT INTO #tab select zt from kbtale
这样写出来的数据不对的啊。是不是哪里有点小问题。

#9


引用 8 楼 yang98226 的回复:
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)
)
INSERT INTO #tab select zt from kbtale
这样写出来的数据不对的啊。是不是哪里有点小问题。

你把你select zt from kbtale的数据贴一部分出来看看

#10


老问题,新难处,一个字段拆分成多个字段的疑难杂症求救!

#11


引用 10 楼 yang98226 的回复:
老问题,新难处,一个字段拆分成多个字段的疑难杂症求救!

我说你把原始数据贴出来,就是你select zt from kbtale的结果复制粘贴出来看看,不是叫你上面代码的结果贴出来,这个结果你上面不是说了有问题了啊

#12


"状态" "1000107917101001";"广x泉铭贸易有限公司";17/10/10;"15:00";?;"";"押出胶水";120;0;"延迟" "1000107917101002";"广州x铭贸易有限公司";17/10/10;"15:00";?;"";"复押胶水";240;0;"延迟" "1000004317101101";"贵州省x化工研究院";17/10/11;"15:00";?;"";"植绒胶水";240;0;"延迟" "1000004317101102";"贵州省x化工研究院";17/10/11;"15:00";?;"";"植绒胶水";80;0;"延迟" "1000006317101101";"上x多帮化工有限公司";17/10/11;"15:00";?;"";"胶水";10;0;"延迟" "1000161817101101";"上海x研塑料有限公司";17/10/11;"15:00";?;"";"TPO";200;0;"延迟" "1000161817101102";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";400;0;"延迟" "1000161817101103";"上x海理研塑料有限公司";17/10/11;"15:00";?;"";"TPO";800;0;"延迟" "1000161817101104";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";1200;0;"延迟" "1000161817101105";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";800;0;"延迟" "1000161817101106";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";1600;0;"延迟" "1000161817101107";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";200;0;"延迟" "1000161817101108";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";1200;0;"延迟" "1000161817101109";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";1200;0;"延迟" "1000161817101110";"上海研塑料有限公司";17/10/11;"15:00";?;"";"PVC";4000;0;"延迟" "1000161817101111";"上海研塑料有限公司";17/10/11;"15:00";?;"";"PVC";5000;0;"延迟" "1000161817101112";"上海理研塑料有限公司";17/10/11;"15:00";?;"";"TPO";3600;0;"延迟" "1000161817101113";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";400;0;"延迟" "S113117101101";"宁波汽车零部件有限公司";17/10/11;"15:00";?;"";"PVC";3000;0;"延迟" "S113117101102";"宁波泰零部件有限公司";17/10/11;"15:00";?;"";"TPV";1000;0;"延迟" "S113117101103";"宁波汽车零部件有限公司";17/10/11;"15:00";?;"";"PVC";2000;0;"延迟" "S113117101104";"宁波汽车零部件有限公司";17/10/11;"15:00";?;"";"TPV";1000;0;"延迟" "1000000717101201";"中广三角洲集团(苏州)特威塑";17/10/12;"15:00";?;"";"TPO";3000;0;"延迟" "1000000417101301";"无锡市中橡塑有限公司";17/10/13;"15:00";?;"";"TPV";1000;0;"延迟" "1000000217101401";"上海金昌工程塑料有限公司";17/10/14;"15:00";?;"";"PP+EPDM+TD30";3000;0;"延迟" "1000002017101401";"化学(中国)管理有限公司";17/10/14;"15:00";?;"";"摺动材";1000;0;"延迟" "1000002017101402";"三井化学(中国)管理有限公司";17/10/14;"15:00";?;"";"TPO";100;0;"延迟" "1000004317101701";"贵州省化工研究院";17/10/17;"15:00";?;"";"植绒胶水";240;0;"延迟" "1000004317101702";"贵州省化工研究院";17/10/17;"15:00";?;"";"植绒胶水";80;0;"延迟" "1000104217101701";"金发科技股份有限公司";17/10/17;"15:00";?;"";"PP+TD30";2000;0;"延迟" "S113117101901";"宁波甬汽车零部件有限公司";17/10/19;"15:00";?;"";"PVC";1000;0;"延迟" "S113117101902";"宁波泰汽车零部件有限公司";17/10/19;"15:00";?;"";"TPV";1000;0;"延迟" "S113117101903";"宁波泰甬汽车零部件有限公司";17/10/19;"15:00";?;"";"PVC";2000;0;"延迟" "S113117101904";"宁波泰汽车零部件有限公司";17/10/19;"15:00";?;"";"TPV";1000;0;"延迟" "1000000217102001";"上海金昌工程塑料有限公司";17/10/20;"15:00";?;"";"PP+EPDM+TD30";3000;0;"延迟" "1000000617102001";"三化学功能塑料(中国)有限公";17/10/20;"15:00";?;"";"PVC";500;0;"延迟" "1000000617102002";"三化学功能塑料(中国)有限公";17/10/20;"15:00";?;"";"PP";1000;0;"延迟" "1000000617102003";"学功能塑料(中国)有限公";17/10/20;"15:00";?;"";"TPE";500;0;"延迟" "1000000617102004";"功能塑料(中国)有限公";17/10/20;"15:00";?;"";"TPE SHORE A 70";500;0;"延迟" "1000000717102001";"三角洲集团(苏州)特威塑";17/10/20;"15:00";?;"";"TPO";3000;0;"延迟" "1000000717102002";"三角洲集团(苏州)特威塑";17/10/20;"15:00";?;"";"PP";1000;0;"延迟" "1000007217102001";"市吉昂植绒有限公司";17/10/20;"15:00";?;"";"绒毛";300;0;"延迟" "1000104217102001";"金发科技股份有限公司";17/10/20;"15:00";?;"";"PP+TD30";2000;0;"延迟" "1000161817102101";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";400;0;"延迟" "1000161817102102";"理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";1600;0;"延迟" "1000161817102103";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";400;0;"延迟" "1000161817102104";"上海研塑料有限公司";17/10/21;"15:00";?;"";"TPO";800;0;"延迟" "1000161817102105";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";400;0;"延迟" "1000161817102106";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";400;0;"延迟" "1000161817102107";"上海研塑料有限公司";17/10/21;"15:00";?;"";"PVC";4000;0;"延迟" "1000161817102108";"上海理塑料有限公司";17/10/21;"15:00";?;"";"PVC";4000;0;"延迟" "1000161817102109";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";1600;0;"延迟" "1000004317102401";"贵州工研究院";17/10/24;"15:00";?;"";"植绒胶水";240;0;"延迟" "1000004317102402";"贵州省化工研究院";17/10/24;"15:00";?;"";"植绒胶水";80;0;"延迟" "S113117102501";"宁波车零部件有限公司";17/10/25;"15:00";?;"";"PVC";2000;0;"延迟" "S113117102502";"宁波甬汽车零部件有限公司";17/10/25;"15:00";?;"";"TPV";1000;0;"延迟" "S113117102503";"宁波甬汽车零部件有限公司";17/10/25;"15:00";?;"";"PVC";2000;0;"延迟" "1000000717102701";"中广核三角洲集团(苏州)特威塑";17/10/27;"15:00";?;"";"TPO";3000;0;"计划" 


select zt from kbtable查询出来的为以上数据。

#13



--测试数据
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab 
select zt from kbtale

--测试数据结束
 
IF OBJECT_ID('tempdb..#t') Is NOT NULL
    DROP TABLE #t
SELECT b.id AS title,IDENTITY(INT,1,1) AS rn into #t 
FROM #tab a
OUTER APPLY dbo.ufn_SplitStringToTable(a.id,'" "') b
--SELECT * FROM #t 
IF OBJECT_ID('tempdb..#t2') Is NOT NULL
    DROP TABLE #t2
;WITH cte AS (
SELECT title,b.id, rn,ROW_NUMBER() OVER( partition by rn ORDER BY title) AS num FROM #t a
OUTER APPLY dbo.ufn_SplitStringToTable(replace(a.title,'"',''),';') b
WHERE title<>'"状态"'
)
SELECT rn,num,id into #t2 FROM cte WHERE num BETWEEN 1 AND 10
 
DECLARE @name VARCHAR(max),@sql VARCHAR(max)
set @name =stuff((SELECT DISTINCT ',['+cast(num AS VARCHAR(20))+']'  from #t2  for xml PATH('')),1,1,'')
PRINT @name
set @sql ='SELECT [1],[2],[3],[4],[5],[6],[7],[8],[9],[10] from #t2 pivot(max(id)for num in('+@name+'))a'
PRINT @sql
EXEC( @sql)

这样可以,你直接复制代码过去执行一下看,可以的话记得结帖

#14


帅哥,现在的问题就是
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab 
select zt from kbtable
这样查询出来的不行的啊
就是会出现我上面说的问题。

#15


引用 14 楼 yang98226 的回复:
帅哥,现在的问题就是
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab 
select zt from kbtable
这样查询出来的不行的啊
就是会出现我上面说的问题。

下面的代码改过了,你没有发现吗?上面的代码我贴出来的代码你执行了没啊?

#16


引用 15 楼 qq_37170555 的回复:
Quote: 引用 14 楼 yang98226 的回复:

帅哥,现在的问题就是
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab 
select zt from kbtable
这样查询出来的不行的啊
就是会出现我上面说的问题。

下面的代码改过了,你没有发现吗?上面的代码我贴出来的代码你执行了没啊?

执行了,只能查询出来一行

#17


引用 16 楼 yang98226 的回复:
Quote: 引用 15 楼 qq_37170555 的回复:

Quote: 引用 14 楼 yang98226 的回复:

帅哥,现在的问题就是
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab 
select zt from kbtable
这样查询出来的不行的啊
就是会出现我上面说的问题。

下面的代码改过了,你没有发现吗?上面的代码我贴出来的代码你执行了没啊?

执行了,只能查询出来一行


--测试数据
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab VALUES('"状态" "1000107917101001";"广x泉铭贸易有限公司";17/10/10;"15:00";?;"";"押出胶水";120;0;"延迟" "1000107917101002";"广州x铭贸易有限公司";17/10/10;"15:00";?;"";"复押胶水";240;0;"延迟" "1000004317101101";"贵州省x化工研究院";17/10/11;"15:00";?;"";"植绒胶水";240;0;"延迟" "1000004317101102";"贵州省x化工研究院";17/10/11;"15:00";?;"";"植绒胶水";80;0;"延迟" "1000006317101101";"上x多帮化工有限公司";17/10/11;"15:00";?;"";"胶水";10;0;"延迟" "1000161817101101";"上海x研塑料有限公司";17/10/11;"15:00";?;"";"TPO";200;0;"延迟" "1000161817101102";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";400;0;"延迟" "1000161817101103";"上x海理研塑料有限公司";17/10/11;"15:00";?;"";"TPO";800;0;"延迟" "1000161817101104";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";1200;0;"延迟" "1000161817101105";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";800;0;"延迟" "1000161817101106";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";1600;0;"延迟" "1000161817101107";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";200;0;"延迟" "1000161817101108";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";1200;0;"延迟" "1000161817101109";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";1200;0;"延迟" "1000161817101110";"上海研塑料有限公司";17/10/11;"15:00";?;"";"PVC";4000;0;"延迟" "1000161817101111";"上海研塑料有限公司";17/10/11;"15:00";?;"";"PVC";5000;0;"延迟" "1000161817101112";"上海理研塑料有限公司";17/10/11;"15:00";?;"";"TPO";3600;0;"延迟" "1000161817101113";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";400;0;"延迟" "S113117101101";"宁波汽车零部件有限公司";17/10/11;"15:00";?;"";"PVC";3000;0;"延迟" "S113117101102";"宁波泰零部件有限公司";17/10/11;"15:00";?;"";"TPV";1000;0;"延迟" "S113117101103";"宁波汽车零部件有限公司";17/10/11;"15:00";?;"";"PVC";2000;0;"延迟" "S113117101104";"宁波汽车零部件有限公司";17/10/11;"15:00";?;"";"TPV";1000;0;"延迟" "1000000717101201";"中广三角洲集团(苏州)特威塑";17/10/12;"15:00";?;"";"TPO";3000;0;"延迟" "1000000417101301";"无锡市中橡塑有限公司";17/10/13;"15:00";?;"";"TPV";1000;0;"延迟" "1000000217101401";"上海金昌工程塑料有限公司";17/10/14;"15:00";?;"";"PP+EPDM+TD30";3000;0;"延迟" "1000002017101401";"化学(中国)管理有限公司";17/10/14;"15:00";?;"";"摺动材";1000;0;"延迟" "1000002017101402";"三井化学(中国)管理有限公司";17/10/14;"15:00";?;"";"TPO";100;0;"延迟" "1000004317101701";"贵州省化工研究院";17/10/17;"15:00";?;"";"植绒胶水";240;0;"延迟" "1000004317101702";"贵州省化工研究院";17/10/17;"15:00";?;"";"植绒胶水";80;0;"延迟" "1000104217101701";"金发科技股份有限公司";17/10/17;"15:00";?;"";"PP+TD30";2000;0;"延迟" "S113117101901";"宁波甬汽车零部件有限公司";17/10/19;"15:00";?;"";"PVC";1000;0;"延迟" "S113117101902";"宁波泰汽车零部件有限公司";17/10/19;"15:00";?;"";"TPV";1000;0;"延迟" "S113117101903";"宁波泰甬汽车零部件有限公司";17/10/19;"15:00";?;"";"PVC";2000;0;"延迟" "S113117101904";"宁波泰汽车零部件有限公司";17/10/19;"15:00";?;"";"TPV";1000;0;"延迟" "1000000217102001";"上海金昌工程塑料有限公司";17/10/20;"15:00";?;"";"PP+EPDM+TD30";3000;0;"延迟" "1000000617102001";"三化学功能塑料(中国)有限公";17/10/20;"15:00";?;"";"PVC";500;0;"延迟" "1000000617102002";"三化学功能塑料(中国)有限公";17/10/20;"15:00";?;"";"PP";1000;0;"延迟" "1000000617102003";"学功能塑料(中国)有限公";17/10/20;"15:00";?;"";"TPE";500;0;"延迟" "1000000617102004";"功能塑料(中国)有限公";17/10/20;"15:00";?;"";"TPE SHORE A 70";500;0;"延迟" "1000000717102001";"三角洲集团(苏州)特威塑";17/10/20;"15:00";?;"";"TPO";3000;0;"延迟" "1000000717102002";"三角洲集团(苏州)特威塑";17/10/20;"15:00";?;"";"PP";1000;0;"延迟" "1000007217102001";"市吉昂植绒有限公司";17/10/20;"15:00";?;"";"绒毛";300;0;"延迟" "1000104217102001";"金发科技股份有限公司";17/10/20;"15:00";?;"";"PP+TD30";2000;0;"延迟" "1000161817102101";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";400;0;"延迟" "1000161817102102";"理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";1600;0;"延迟" "1000161817102103";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";400;0;"延迟" "1000161817102104";"上海研塑料有限公司";17/10/21;"15:00";?;"";"TPO";800;0;"延迟" "1000161817102105";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";400;0;"延迟" "1000161817102106";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";400;0;"延迟" "1000161817102107";"上海研塑料有限公司";17/10/21;"15:00";?;"";"PVC";4000;0;"延迟" "1000161817102108";"上海理塑料有限公司";17/10/21;"15:00";?;"";"PVC";4000;0;"延迟" "1000161817102109";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";1600;0;"延迟" "1000004317102401";"贵州工研究院";17/10/24;"15:00";?;"";"植绒胶水";240;0;"延迟" "1000004317102402";"贵州省化工研究院";17/10/24;"15:00";?;"";"植绒胶水";80;0;"延迟" "S113117102501";"宁波车零部件有限公司";17/10/25;"15:00";?;"";"PVC";2000;0;"延迟" "S113117102502";"宁波甬汽车零部件有限公司";17/10/25;"15:00";?;"";"TPV";1000;0;"延迟" "S113117102503";"宁波甬汽车零部件有限公司";17/10/25;"15:00";?;"";"PVC";2000;0;"延迟" "1000000717102701";"中广核三角洲集团(苏州)特威塑";17/10/27;"15:00";?;"";"TPO";3000;0;"计划" ')
 
--测试数据结束
  
IF OBJECT_ID('tempdb..#t') Is NOT NULL
    DROP TABLE #t
SELECT b.id AS title,IDENTITY(INT,1,1) AS rn into #t 
FROM #tab a
OUTER APPLY dbo.ufn_SplitStringToTable(a.id,'" "') b
--SELECT * FROM #t 
IF OBJECT_ID('tempdb..#t2') Is NOT NULL
    DROP TABLE #t2
;WITH cte AS (
SELECT title,b.id, rn,ROW_NUMBER() OVER( partition by rn ORDER BY title) AS num FROM #t a
OUTER APPLY dbo.ufn_SplitStringToTable(replace(a.title,'"',''),';') b
WHERE rn<>1
)
SELECT rn,num,id into #t2 FROM cte WHERE num BETWEEN 1 AND 10
  
DECLARE @name VARCHAR(max),@sql VARCHAR(max)
set @name =stuff((SELECT DISTINCT ',['+cast(num AS VARCHAR(20))+']'  from #t2  for xml PATH('')),1,1,'')
PRINT @name
set @sql ='SELECT [1],[2],[3],[4],[5],[6],[7],[8],[9],[10] from #t2 pivot(max(id)for num in('+@name+'))a'
PRINT @sql
EXEC( @sql)

上面insert into #tab的数据就是你复制粘贴出来的select zt from kbtable的原始数据,你看看能运行出来不,反正我这是可以出来哈,一共58行记录。
老问题,新难处,一个字段拆分成多个字段的疑难杂症求救!

#18


引用 16 楼 yang98226 的回复:
Quote: 引用 15 楼 qq_37170555 的回复:

Quote: 引用 14 楼 yang98226 的回复:

帅哥,现在的问题就是
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab 
select zt from kbtable
这样查询出来的不行的啊
就是会出现我上面说的问题。

下面的代码改过了,你没有发现吗?上面的代码我贴出来的代码你执行了没啊?

执行了,只能查询出来一行

你要还是不会我真的是爱莫能助了,拿你没办法了。首先你要看懂上面的代码,为什么要这么做,为什么同样的东西我这里可以出来,你那里却老是说出不来结果。你这盲目的跟我说出不来我也没办法啊,我只能说它在我这边就是可以啊,你也看到了,上面的结果也出来了,同样是你给我的数据啊

#19


引用 18 楼 qq_37170555 的回复:
Quote: 引用 16 楼 yang98226 的回复:

Quote: 引用 15 楼 qq_37170555 的回复:

Quote: 引用 14 楼 yang98226 的回复:

帅哥,现在的问题就是
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab 
select zt from kbtable
这样查询出来的不行的啊
就是会出现我上面说的问题。

下面的代码改过了,你没有发现吗?上面的代码我贴出来的代码你执行了没啊?

执行了,只能查询出来一行

你要还是不会我真的是爱莫能助了,拿你没办法了。首先你要看懂上面的代码,为什么要这么做,为什么同样的东西我这里可以出来,你那里却老是说出不来结果。你这盲目的跟我说出不来我也没办法啊,我只能说它在我这边就是可以啊,你也看到了,上面的结果也出来了,同样是你给我的数据啊



数据粘贴来形成字符串是可以的。
但是数据select  zt from 表获取到数据就不行。

#20


引用 19 楼 yang98226的回复:
Quote: 引用 18 楼 qq_37170555 的回复:

Quote: 引用 16 楼 yang98226 的回复:

Quote: 引用 15 楼 qq_37170555 的回复:

Quote: 引用 14 楼 yang98226 的回复:

帅哥,现在的问题就是
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab 
select zt from kbtable
这样查询出来的不行的啊
就是会出现我上面说的问题。

下面的代码改过了,你没有发现吗?上面的代码我贴出来的代码你执行了没啊?

执行了,只能查询出来一行

你要还是不会我真的是爱莫能助了,拿你没办法了。首先你要看懂上面的代码,为什么要这么做,为什么同样的东西我这里可以出来,你那里却老是说出不来结果。你这盲目的跟我说出不来我也没办法啊,我只能说它在我这边就是可以啊,你也看到了,上面的结果也出来了,同样是你给我的数据啊



数据粘贴来形成字符串是可以的。
但是数据select  zt from 表获取到数据就不行。

那你自己琢磨吧 老问题,新难处,一个字段拆分成多个字段的疑难杂症求救!

#21


该回复于2017-11-07 15:38:38被管理员删除

#22


引用 21 楼 yang98226 的回复:
老问题,新难处,一个字段拆分成多个字段的疑难杂症求救!


IF OBJECT_ID('tempdb..#t') Is NOT NULL
    DROP TABLE #t
SELECT b.id AS title,IDENTITY(INT,1,1) AS rn into #t 
FROM kbtable a
OUTER APPLY dbo.ufn_SplitStringToTable(a.zt,'" "') b
 
IF OBJECT_ID('tempdb..#t2') Is NOT NULL
    DROP TABLE #t2
;WITH cte AS (
SELECT title,b.id, rn,ROW_NUMBER() OVER( partition by rn ORDER BY title) AS num FROM #t a
OUTER APPLY dbo.ufn_SplitStringToTable(replace(a.title,'"',''),';') b
WHERE rn<>1
)
SELECT rn,num,id into #t2 FROM cte WHERE num BETWEEN 1 AND 10
   
DECLARE @name VARCHAR(max),@sql VARCHAR(max)
set @name =stuff((SELECT DISTINCT ',['+cast(num AS VARCHAR(20))+']'  from #t2  for xml PATH('')),1,1,'')
PRINT @name
set @sql ='SELECT [1],[2],[3],[4],[5],[6],[7],[8],[9],[10] from #t2 pivot(max(id)for num in('+@name+'))a'
PRINT @sql
EXEC( @sql)

你在这样试试看,再不行真没办法了。上面的代码什么都不要改,直接复制粘贴到你的数据库中执行就可以,然后看能出来结果不

#1


你是想通过
"状态" "1000107917101001";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"押出胶水";120;0;"延迟" "1000107917101002";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"复押胶水";240;0;"延迟" "1000004317101101";"贵州省化工研究院";17/10/11;"15:00";?;"";"植绒胶水";240;0;"延迟";3000;0;"计划"
得到下面这样的结果吗?
老问题,新难处,一个字段拆分成多个字段的疑难杂症求救!
是的话用下面的代码就可以了

--测试数据
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)
)
INSERT INTO #tab VALUES ( '"状态" "1000107917101001";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"押出胶水";120;0;"延迟" "1000107917101002";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"复押胶水";240;0;"延迟" "1000004317101101";"贵州省化工研究院";17/10/11;"15:00";?;"";"植绒胶水";240;0;"延迟";3000;0;"计划"')
--测试数据结束

IF OBJECT_ID('tempdb..#t') Is NOT NULL
DROP TABLE #t
SELECT b.id AS title,IDENTITY(INT,1,1) AS rn into #t FROM #tab a
OUTER APPLY dbo.ufn_SplitStringToTable(a.id,' ') b

IF OBJECT_ID('tempdb..#t2') Is NOT NULL
DROP TABLE #t2
;WITH cte AS (
SELECT title,b.id, rn,ROW_NUMBER() OVER( partition by rn ORDER BY title) AS num FROM #t a
OUTER APPLY dbo.ufn_SplitStringToTable(replace(a.title,'"',''),';') b
WHERE rn<>1
)
SELECT rn,num,id into #t2 FROM cte WHERE num BETWEEN 1 AND 10

DECLARE @name VARCHAR(max),@sql VARCHAR(max)
set @name =stuff((SELECT DISTINCT ',['+cast(num AS VARCHAR(20))+']'  from #t2  for xml PATH('')),1,1,'')
PRINT @name
set @sql ='SELECT [1],[2],[3],[4],[5],[6],[7],[8],[9],[10] from #t2 pivot(max(id)for num in('+@name+'))a'
PRINT @sql
EXEC( @sql)

#2



CREATE FUNCTION [dbo].[ufn_SplitStringToTable]
(
  @str VARCHAR(MAX) ,
  @split VARCHAR(10)
)
RETURNS TABLE
    AS 
RETURN
    ( SELECT    B.id
      FROM      ( SELECT    [value] = CONVERT(XML , '<v>' + REPLACE(@str , @split , '</v><v>')
                            + '</v>')
                ) A
      OUTER APPLY ( SELECT  id = N.v.value('.' , 'varchar(100)')
                    FROM    A.[value].nodes('/v') N ( v )
                  ) B
    )

首先得创建这个函数上面语句才可以调用这个函数达到效果

#3


你先把数据导入一个中间表,然后对中间表进行处理,处理成功后再导入最终表。你也可以考虑在中间表上加触发器,通过触发器触发插入最终表。



with cte1
as
(SELECT REPLACE(REPLACE(REPLACE(content,'"状态" ',''),' ',';'),'"','') as content_new FROM 中间表),

cte2
as
(select A.*,b.number,
SUBSTRING(content_new,number,CHARINDEX(';',content_new+';',number)-number) as single_item,
((ROW_NUMBER() over (order by number)-1)/10) as group_seq
from cte1 A
join master..spt_values B on CHARINDEX(';',';'+content_new,number)=number 
where type='P'),

cte3
as
(select *,COUNT(1) over (partition by group_seq) as count_by_item,
 ROW_NUMBER() over (PARTITION by group_seq order by number) as single_seq from cte2)

select [1],[2],[3],[4],[5],[6],[7],[8],[9],[10]
from (select group_seq,single_item,count_by_item,single_seq from cte3) as A
pivot (max(single_item) for single_seq in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10])) as B
where count_by_item=10 --如果导入的数据最终拆分的字段数目始终是10的整数倍,或者一条记录不满10个字段也进行插入,那可以忽略这一条件.

#4


[code=sql]
--测试数据
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)
)
INSERT INTO #tab VALUES ( '"状态" "1000107917101001";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"押出胶水";120;0;"延迟" "1000107917101002";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"复押胶水";240;0;"延迟" "1000004317101101";"贵州省化工研究院";17/10/11;"15:00";?;"";"植绒胶水";240;0;"延迟";3000;0;"计划"')
--测试数据结束
---------------------------------------------------------------这个地方是 select zt from [表] 如何体现?

#5


引用 4 楼 yang98226 的回复:
[code=sql]
--测试数据
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)
)
INSERT INTO #tab VALUES ( '"状态" "1000107917101001";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"押出胶水";120;0;"延迟" "1000107917101002";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"复押胶水";240;0;"延迟" "1000004317101101";"贵州省化工研究院";17/10/11;"15:00";?;"";"植绒胶水";240;0;"延迟";3000;0;"计划"')
--测试数据结束
---------------------------------------------------------------这个地方是 select zt from [表] 如何体现?

直接
INSERT INTO #tab
select zt from [表]
然后执行上面的代码就ok了,等于把你现在的表里zt的内容插入临时表#tab中了

#6


用bat打开保存,依然不会保存成,标准csv文件。因为dos命令或者任何脚本命令打开方式基本都是数据流方式,保存也是数据流保存。想保存成最标准的csv文件,要安装office,用vba开发最简单;用.net平台的话,用office的com组件开发也行。都能打开标准的excel程序,保存动作,就相当于你手动打开excel并保存。

#7


引用 4 楼 yang98226 的回复:
[code=sql]
--测试数据
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)
)
INSERT INTO #tab VALUES ( '"状态" "1000107917101001";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"押出胶水";120;0;"延迟" "1000107917101002";"广州泉铭贸易有限公司";17/10/10;"15:00";?;"";"复押胶水";240;0;"延迟" "1000004317101101";"贵州省化工研究院";17/10/11;"15:00";?;"";"植绒胶水";240;0;"延迟";3000;0;"计划"')
--测试数据结束
---------------------------------------------------------------这个地方是 select zt from [表] 如何体现?



如果直接select zt 表,大概80行的数据,直接这样的结果。
SHORE NULL NULL NULL NULL NULL NULL NULL NULL NULL
A NULL NULL NULL NULL NULL NULL NULL NULL NULL
70 500 0 延迟 1000000717102001 中广核三角洲集团(苏州)特威塑 17/10/20 15:00 ? TPO


感觉这样有点小问题的啊

#8


IF OBJECT_ID('tempdb..#tab') Is NOT NULL
DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)
)
INSERT INTO #tab select zt from kbtale
这样写出来的数据不对的啊。是不是哪里有点小问题。

#9


引用 8 楼 yang98226 的回复:
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)
)
INSERT INTO #tab select zt from kbtale
这样写出来的数据不对的啊。是不是哪里有点小问题。

你把你select zt from kbtale的数据贴一部分出来看看

#10


老问题,新难处,一个字段拆分成多个字段的疑难杂症求救!

#11


引用 10 楼 yang98226 的回复:
老问题,新难处,一个字段拆分成多个字段的疑难杂症求救!

我说你把原始数据贴出来,就是你select zt from kbtale的结果复制粘贴出来看看,不是叫你上面代码的结果贴出来,这个结果你上面不是说了有问题了啊

#12


"状态" "1000107917101001";"广x泉铭贸易有限公司";17/10/10;"15:00";?;"";"押出胶水";120;0;"延迟" "1000107917101002";"广州x铭贸易有限公司";17/10/10;"15:00";?;"";"复押胶水";240;0;"延迟" "1000004317101101";"贵州省x化工研究院";17/10/11;"15:00";?;"";"植绒胶水";240;0;"延迟" "1000004317101102";"贵州省x化工研究院";17/10/11;"15:00";?;"";"植绒胶水";80;0;"延迟" "1000006317101101";"上x多帮化工有限公司";17/10/11;"15:00";?;"";"胶水";10;0;"延迟" "1000161817101101";"上海x研塑料有限公司";17/10/11;"15:00";?;"";"TPO";200;0;"延迟" "1000161817101102";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";400;0;"延迟" "1000161817101103";"上x海理研塑料有限公司";17/10/11;"15:00";?;"";"TPO";800;0;"延迟" "1000161817101104";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";1200;0;"延迟" "1000161817101105";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";800;0;"延迟" "1000161817101106";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";1600;0;"延迟" "1000161817101107";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";200;0;"延迟" "1000161817101108";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";1200;0;"延迟" "1000161817101109";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";1200;0;"延迟" "1000161817101110";"上海研塑料有限公司";17/10/11;"15:00";?;"";"PVC";4000;0;"延迟" "1000161817101111";"上海研塑料有限公司";17/10/11;"15:00";?;"";"PVC";5000;0;"延迟" "1000161817101112";"上海理研塑料有限公司";17/10/11;"15:00";?;"";"TPO";3600;0;"延迟" "1000161817101113";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";400;0;"延迟" "S113117101101";"宁波汽车零部件有限公司";17/10/11;"15:00";?;"";"PVC";3000;0;"延迟" "S113117101102";"宁波泰零部件有限公司";17/10/11;"15:00";?;"";"TPV";1000;0;"延迟" "S113117101103";"宁波汽车零部件有限公司";17/10/11;"15:00";?;"";"PVC";2000;0;"延迟" "S113117101104";"宁波汽车零部件有限公司";17/10/11;"15:00";?;"";"TPV";1000;0;"延迟" "1000000717101201";"中广三角洲集团(苏州)特威塑";17/10/12;"15:00";?;"";"TPO";3000;0;"延迟" "1000000417101301";"无锡市中橡塑有限公司";17/10/13;"15:00";?;"";"TPV";1000;0;"延迟" "1000000217101401";"上海金昌工程塑料有限公司";17/10/14;"15:00";?;"";"PP+EPDM+TD30";3000;0;"延迟" "1000002017101401";"化学(中国)管理有限公司";17/10/14;"15:00";?;"";"摺动材";1000;0;"延迟" "1000002017101402";"三井化学(中国)管理有限公司";17/10/14;"15:00";?;"";"TPO";100;0;"延迟" "1000004317101701";"贵州省化工研究院";17/10/17;"15:00";?;"";"植绒胶水";240;0;"延迟" "1000004317101702";"贵州省化工研究院";17/10/17;"15:00";?;"";"植绒胶水";80;0;"延迟" "1000104217101701";"金发科技股份有限公司";17/10/17;"15:00";?;"";"PP+TD30";2000;0;"延迟" "S113117101901";"宁波甬汽车零部件有限公司";17/10/19;"15:00";?;"";"PVC";1000;0;"延迟" "S113117101902";"宁波泰汽车零部件有限公司";17/10/19;"15:00";?;"";"TPV";1000;0;"延迟" "S113117101903";"宁波泰甬汽车零部件有限公司";17/10/19;"15:00";?;"";"PVC";2000;0;"延迟" "S113117101904";"宁波泰汽车零部件有限公司";17/10/19;"15:00";?;"";"TPV";1000;0;"延迟" "1000000217102001";"上海金昌工程塑料有限公司";17/10/20;"15:00";?;"";"PP+EPDM+TD30";3000;0;"延迟" "1000000617102001";"三化学功能塑料(中国)有限公";17/10/20;"15:00";?;"";"PVC";500;0;"延迟" "1000000617102002";"三化学功能塑料(中国)有限公";17/10/20;"15:00";?;"";"PP";1000;0;"延迟" "1000000617102003";"学功能塑料(中国)有限公";17/10/20;"15:00";?;"";"TPE";500;0;"延迟" "1000000617102004";"功能塑料(中国)有限公";17/10/20;"15:00";?;"";"TPE SHORE A 70";500;0;"延迟" "1000000717102001";"三角洲集团(苏州)特威塑";17/10/20;"15:00";?;"";"TPO";3000;0;"延迟" "1000000717102002";"三角洲集团(苏州)特威塑";17/10/20;"15:00";?;"";"PP";1000;0;"延迟" "1000007217102001";"市吉昂植绒有限公司";17/10/20;"15:00";?;"";"绒毛";300;0;"延迟" "1000104217102001";"金发科技股份有限公司";17/10/20;"15:00";?;"";"PP+TD30";2000;0;"延迟" "1000161817102101";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";400;0;"延迟" "1000161817102102";"理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";1600;0;"延迟" "1000161817102103";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";400;0;"延迟" "1000161817102104";"上海研塑料有限公司";17/10/21;"15:00";?;"";"TPO";800;0;"延迟" "1000161817102105";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";400;0;"延迟" "1000161817102106";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";400;0;"延迟" "1000161817102107";"上海研塑料有限公司";17/10/21;"15:00";?;"";"PVC";4000;0;"延迟" "1000161817102108";"上海理塑料有限公司";17/10/21;"15:00";?;"";"PVC";4000;0;"延迟" "1000161817102109";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";1600;0;"延迟" "1000004317102401";"贵州工研究院";17/10/24;"15:00";?;"";"植绒胶水";240;0;"延迟" "1000004317102402";"贵州省化工研究院";17/10/24;"15:00";?;"";"植绒胶水";80;0;"延迟" "S113117102501";"宁波车零部件有限公司";17/10/25;"15:00";?;"";"PVC";2000;0;"延迟" "S113117102502";"宁波甬汽车零部件有限公司";17/10/25;"15:00";?;"";"TPV";1000;0;"延迟" "S113117102503";"宁波甬汽车零部件有限公司";17/10/25;"15:00";?;"";"PVC";2000;0;"延迟" "1000000717102701";"中广核三角洲集团(苏州)特威塑";17/10/27;"15:00";?;"";"TPO";3000;0;"计划" 


select zt from kbtable查询出来的为以上数据。

#13



--测试数据
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab 
select zt from kbtale

--测试数据结束
 
IF OBJECT_ID('tempdb..#t') Is NOT NULL
    DROP TABLE #t
SELECT b.id AS title,IDENTITY(INT,1,1) AS rn into #t 
FROM #tab a
OUTER APPLY dbo.ufn_SplitStringToTable(a.id,'" "') b
--SELECT * FROM #t 
IF OBJECT_ID('tempdb..#t2') Is NOT NULL
    DROP TABLE #t2
;WITH cte AS (
SELECT title,b.id, rn,ROW_NUMBER() OVER( partition by rn ORDER BY title) AS num FROM #t a
OUTER APPLY dbo.ufn_SplitStringToTable(replace(a.title,'"',''),';') b
WHERE title<>'"状态"'
)
SELECT rn,num,id into #t2 FROM cte WHERE num BETWEEN 1 AND 10
 
DECLARE @name VARCHAR(max),@sql VARCHAR(max)
set @name =stuff((SELECT DISTINCT ',['+cast(num AS VARCHAR(20))+']'  from #t2  for xml PATH('')),1,1,'')
PRINT @name
set @sql ='SELECT [1],[2],[3],[4],[5],[6],[7],[8],[9],[10] from #t2 pivot(max(id)for num in('+@name+'))a'
PRINT @sql
EXEC( @sql)

这样可以,你直接复制代码过去执行一下看,可以的话记得结帖

#14


帅哥,现在的问题就是
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab 
select zt from kbtable
这样查询出来的不行的啊
就是会出现我上面说的问题。

#15


引用 14 楼 yang98226 的回复:
帅哥,现在的问题就是
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab 
select zt from kbtable
这样查询出来的不行的啊
就是会出现我上面说的问题。

下面的代码改过了,你没有发现吗?上面的代码我贴出来的代码你执行了没啊?

#16


引用 15 楼 qq_37170555 的回复:
Quote: 引用 14 楼 yang98226 的回复:

帅哥,现在的问题就是
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab 
select zt from kbtable
这样查询出来的不行的啊
就是会出现我上面说的问题。

下面的代码改过了,你没有发现吗?上面的代码我贴出来的代码你执行了没啊?

执行了,只能查询出来一行

#17


引用 16 楼 yang98226 的回复:
Quote: 引用 15 楼 qq_37170555 的回复:

Quote: 引用 14 楼 yang98226 的回复:

帅哥,现在的问题就是
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab 
select zt from kbtable
这样查询出来的不行的啊
就是会出现我上面说的问题。

下面的代码改过了,你没有发现吗?上面的代码我贴出来的代码你执行了没啊?

执行了,只能查询出来一行


--测试数据
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab VALUES('"状态" "1000107917101001";"广x泉铭贸易有限公司";17/10/10;"15:00";?;"";"押出胶水";120;0;"延迟" "1000107917101002";"广州x铭贸易有限公司";17/10/10;"15:00";?;"";"复押胶水";240;0;"延迟" "1000004317101101";"贵州省x化工研究院";17/10/11;"15:00";?;"";"植绒胶水";240;0;"延迟" "1000004317101102";"贵州省x化工研究院";17/10/11;"15:00";?;"";"植绒胶水";80;0;"延迟" "1000006317101101";"上x多帮化工有限公司";17/10/11;"15:00";?;"";"胶水";10;0;"延迟" "1000161817101101";"上海x研塑料有限公司";17/10/11;"15:00";?;"";"TPO";200;0;"延迟" "1000161817101102";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";400;0;"延迟" "1000161817101103";"上x海理研塑料有限公司";17/10/11;"15:00";?;"";"TPO";800;0;"延迟" "1000161817101104";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";1200;0;"延迟" "1000161817101105";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";800;0;"延迟" "1000161817101106";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";1600;0;"延迟" "1000161817101107";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";200;0;"延迟" "1000161817101108";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";1200;0;"延迟" "1000161817101109";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";1200;0;"延迟" "1000161817101110";"上海研塑料有限公司";17/10/11;"15:00";?;"";"PVC";4000;0;"延迟" "1000161817101111";"上海研塑料有限公司";17/10/11;"15:00";?;"";"PVC";5000;0;"延迟" "1000161817101112";"上海理研塑料有限公司";17/10/11;"15:00";?;"";"TPO";3600;0;"延迟" "1000161817101113";"上海研塑料有限公司";17/10/11;"15:00";?;"";"TPO";400;0;"延迟" "S113117101101";"宁波汽车零部件有限公司";17/10/11;"15:00";?;"";"PVC";3000;0;"延迟" "S113117101102";"宁波泰零部件有限公司";17/10/11;"15:00";?;"";"TPV";1000;0;"延迟" "S113117101103";"宁波汽车零部件有限公司";17/10/11;"15:00";?;"";"PVC";2000;0;"延迟" "S113117101104";"宁波汽车零部件有限公司";17/10/11;"15:00";?;"";"TPV";1000;0;"延迟" "1000000717101201";"中广三角洲集团(苏州)特威塑";17/10/12;"15:00";?;"";"TPO";3000;0;"延迟" "1000000417101301";"无锡市中橡塑有限公司";17/10/13;"15:00";?;"";"TPV";1000;0;"延迟" "1000000217101401";"上海金昌工程塑料有限公司";17/10/14;"15:00";?;"";"PP+EPDM+TD30";3000;0;"延迟" "1000002017101401";"化学(中国)管理有限公司";17/10/14;"15:00";?;"";"摺动材";1000;0;"延迟" "1000002017101402";"三井化学(中国)管理有限公司";17/10/14;"15:00";?;"";"TPO";100;0;"延迟" "1000004317101701";"贵州省化工研究院";17/10/17;"15:00";?;"";"植绒胶水";240;0;"延迟" "1000004317101702";"贵州省化工研究院";17/10/17;"15:00";?;"";"植绒胶水";80;0;"延迟" "1000104217101701";"金发科技股份有限公司";17/10/17;"15:00";?;"";"PP+TD30";2000;0;"延迟" "S113117101901";"宁波甬汽车零部件有限公司";17/10/19;"15:00";?;"";"PVC";1000;0;"延迟" "S113117101902";"宁波泰汽车零部件有限公司";17/10/19;"15:00";?;"";"TPV";1000;0;"延迟" "S113117101903";"宁波泰甬汽车零部件有限公司";17/10/19;"15:00";?;"";"PVC";2000;0;"延迟" "S113117101904";"宁波泰汽车零部件有限公司";17/10/19;"15:00";?;"";"TPV";1000;0;"延迟" "1000000217102001";"上海金昌工程塑料有限公司";17/10/20;"15:00";?;"";"PP+EPDM+TD30";3000;0;"延迟" "1000000617102001";"三化学功能塑料(中国)有限公";17/10/20;"15:00";?;"";"PVC";500;0;"延迟" "1000000617102002";"三化学功能塑料(中国)有限公";17/10/20;"15:00";?;"";"PP";1000;0;"延迟" "1000000617102003";"学功能塑料(中国)有限公";17/10/20;"15:00";?;"";"TPE";500;0;"延迟" "1000000617102004";"功能塑料(中国)有限公";17/10/20;"15:00";?;"";"TPE SHORE A 70";500;0;"延迟" "1000000717102001";"三角洲集团(苏州)特威塑";17/10/20;"15:00";?;"";"TPO";3000;0;"延迟" "1000000717102002";"三角洲集团(苏州)特威塑";17/10/20;"15:00";?;"";"PP";1000;0;"延迟" "1000007217102001";"市吉昂植绒有限公司";17/10/20;"15:00";?;"";"绒毛";300;0;"延迟" "1000104217102001";"金发科技股份有限公司";17/10/20;"15:00";?;"";"PP+TD30";2000;0;"延迟" "1000161817102101";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";400;0;"延迟" "1000161817102102";"理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";1600;0;"延迟" "1000161817102103";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";400;0;"延迟" "1000161817102104";"上海研塑料有限公司";17/10/21;"15:00";?;"";"TPO";800;0;"延迟" "1000161817102105";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";400;0;"延迟" "1000161817102106";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";400;0;"延迟" "1000161817102107";"上海研塑料有限公司";17/10/21;"15:00";?;"";"PVC";4000;0;"延迟" "1000161817102108";"上海理塑料有限公司";17/10/21;"15:00";?;"";"PVC";4000;0;"延迟" "1000161817102109";"上海理研塑料有限公司";17/10/21;"15:00";?;"";"TPO";1600;0;"延迟" "1000004317102401";"贵州工研究院";17/10/24;"15:00";?;"";"植绒胶水";240;0;"延迟" "1000004317102402";"贵州省化工研究院";17/10/24;"15:00";?;"";"植绒胶水";80;0;"延迟" "S113117102501";"宁波车零部件有限公司";17/10/25;"15:00";?;"";"PVC";2000;0;"延迟" "S113117102502";"宁波甬汽车零部件有限公司";17/10/25;"15:00";?;"";"TPV";1000;0;"延迟" "S113117102503";"宁波甬汽车零部件有限公司";17/10/25;"15:00";?;"";"PVC";2000;0;"延迟" "1000000717102701";"中广核三角洲集团(苏州)特威塑";17/10/27;"15:00";?;"";"TPO";3000;0;"计划" ')
 
--测试数据结束
  
IF OBJECT_ID('tempdb..#t') Is NOT NULL
    DROP TABLE #t
SELECT b.id AS title,IDENTITY(INT,1,1) AS rn into #t 
FROM #tab a
OUTER APPLY dbo.ufn_SplitStringToTable(a.id,'" "') b
--SELECT * FROM #t 
IF OBJECT_ID('tempdb..#t2') Is NOT NULL
    DROP TABLE #t2
;WITH cte AS (
SELECT title,b.id, rn,ROW_NUMBER() OVER( partition by rn ORDER BY title) AS num FROM #t a
OUTER APPLY dbo.ufn_SplitStringToTable(replace(a.title,'"',''),';') b
WHERE rn<>1
)
SELECT rn,num,id into #t2 FROM cte WHERE num BETWEEN 1 AND 10
  
DECLARE @name VARCHAR(max),@sql VARCHAR(max)
set @name =stuff((SELECT DISTINCT ',['+cast(num AS VARCHAR(20))+']'  from #t2  for xml PATH('')),1,1,'')
PRINT @name
set @sql ='SELECT [1],[2],[3],[4],[5],[6],[7],[8],[9],[10] from #t2 pivot(max(id)for num in('+@name+'))a'
PRINT @sql
EXEC( @sql)

上面insert into #tab的数据就是你复制粘贴出来的select zt from kbtable的原始数据,你看看能运行出来不,反正我这是可以出来哈,一共58行记录。
老问题,新难处,一个字段拆分成多个字段的疑难杂症求救!

#18


引用 16 楼 yang98226 的回复:
Quote: 引用 15 楼 qq_37170555 的回复:

Quote: 引用 14 楼 yang98226 的回复:

帅哥,现在的问题就是
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab 
select zt from kbtable
这样查询出来的不行的啊
就是会出现我上面说的问题。

下面的代码改过了,你没有发现吗?上面的代码我贴出来的代码你执行了没啊?

执行了,只能查询出来一行

你要还是不会我真的是爱莫能助了,拿你没办法了。首先你要看懂上面的代码,为什么要这么做,为什么同样的东西我这里可以出来,你那里却老是说出不来结果。你这盲目的跟我说出不来我也没办法啊,我只能说它在我这边就是可以啊,你也看到了,上面的结果也出来了,同样是你给我的数据啊

#19


引用 18 楼 qq_37170555 的回复:
Quote: 引用 16 楼 yang98226 的回复:

Quote: 引用 15 楼 qq_37170555 的回复:

Quote: 引用 14 楼 yang98226 的回复:

帅哥,现在的问题就是
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab 
select zt from kbtable
这样查询出来的不行的啊
就是会出现我上面说的问题。

下面的代码改过了,你没有发现吗?上面的代码我贴出来的代码你执行了没啊?

执行了,只能查询出来一行

你要还是不会我真的是爱莫能助了,拿你没办法了。首先你要看懂上面的代码,为什么要这么做,为什么同样的东西我这里可以出来,你那里却老是说出不来结果。你这盲目的跟我说出不来我也没办法啊,我只能说它在我这边就是可以啊,你也看到了,上面的结果也出来了,同样是你给我的数据啊



数据粘贴来形成字符串是可以的。
但是数据select  zt from 表获取到数据就不行。

#20


引用 19 楼 yang98226的回复:
Quote: 引用 18 楼 qq_37170555 的回复:

Quote: 引用 16 楼 yang98226 的回复:

Quote: 引用 15 楼 qq_37170555 的回复:

Quote: 引用 14 楼 yang98226 的回复:

帅哥,现在的问题就是
IF OBJECT_ID('tempdb..#tab') Is NOT NULL
    DROP TABLE #tab
CREATE TABLE #tab
(
id nVARCHAR(max)   
)
INSERT INTO #tab 
select zt from kbtable
这样查询出来的不行的啊
就是会出现我上面说的问题。

下面的代码改过了,你没有发现吗?上面的代码我贴出来的代码你执行了没啊?

执行了,只能查询出来一行

你要还是不会我真的是爱莫能助了,拿你没办法了。首先你要看懂上面的代码,为什么要这么做,为什么同样的东西我这里可以出来,你那里却老是说出不来结果。你这盲目的跟我说出不来我也没办法啊,我只能说它在我这边就是可以啊,你也看到了,上面的结果也出来了,同样是你给我的数据啊



数据粘贴来形成字符串是可以的。
但是数据select  zt from 表获取到数据就不行。

那你自己琢磨吧 老问题,新难处,一个字段拆分成多个字段的疑难杂症求救!

#21


该回复于2017-11-07 15:38:38被管理员删除

#22


引用 21 楼 yang98226 的回复:
老问题,新难处,一个字段拆分成多个字段的疑难杂症求救!


IF OBJECT_ID('tempdb..#t') Is NOT NULL
    DROP TABLE #t
SELECT b.id AS title,IDENTITY(INT,1,1) AS rn into #t 
FROM kbtable a
OUTER APPLY dbo.ufn_SplitStringToTable(a.zt,'" "') b
 
IF OBJECT_ID('tempdb..#t2') Is NOT NULL
    DROP TABLE #t2
;WITH cte AS (
SELECT title,b.id, rn,ROW_NUMBER() OVER( partition by rn ORDER BY title) AS num FROM #t a
OUTER APPLY dbo.ufn_SplitStringToTable(replace(a.title,'"',''),';') b
WHERE rn<>1
)
SELECT rn,num,id into #t2 FROM cte WHERE num BETWEEN 1 AND 10
   
DECLARE @name VARCHAR(max),@sql VARCHAR(max)
set @name =stuff((SELECT DISTINCT ',['+cast(num AS VARCHAR(20))+']'  from #t2  for xml PATH('')),1,1,'')
PRINT @name
set @sql ='SELECT [1],[2],[3],[4],[5],[6],[7],[8],[9],[10] from #t2 pivot(max(id)for num in('+@name+'))a'
PRINT @sql
EXEC( @sql)

你在这样试试看,再不行真没办法了。上面的代码什么都不要改,直接复制粘贴到你的数据库中执行就可以,然后看能出来结果不