将管道从行拆分为COLUMN [英] Split Pipeline from rows to COLUMN

查看:101
本文介绍了将管道从行拆分为COLUMN的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





你能告诉我如何将行转换成列



例如;



'563 / 90,Chitragupta Nagar | Alambagh |勒克瑙|北方邦|印度| 226005'



应该是第1栏:563/90,第2栏:Chitragupta Nagar .. in sql



问候

dhana

Hi,

Could u please tel me how to convert rows into column

for eg;

'563/90, Chitragupta Nagar | Alambagh | Lucknow | Uttar Pradesh | India | 226005'

should be column 1: 563/90 ,column 2: Chitragupta Nagar.. in sql

Regards
dhana

推荐答案

测试它:

Test it:
DECLARE @string VARCHAR(255)
DECLARE @delimiter VARCHAR(1)

--DROP TABLE #tmp
CREATE TABLE #tmp (ID INT, ColID INT, MyValue VARCHAR(255))

DECLARE @t TABLE (ID INT IDENTITY(1,1), SomeData VARCHAR(300))
INSERT INTO @t (SomeData) 
SELECT '563/90, Chitragupta Nagar | Alambagh | Lucknow | Uttar Pradesh | India | 226005' AS SomeData
UNION ALL SELECT '564/91, Chitragupta Nagar | Balambagh | Mucknow | Vttar Rradesh | India | 226006'
UNION ALL SELECT '565/92, Dhitragupta Oagar | Calambagh | Nucknow | Wttar Sradesh | India | 226007'
UNION ALL SELECT '566/93, Ehitragupta Pagar | Dalambagh | Oucknow | Xttar Tradesh | India | 226008'
UNION ALL SELECT '563/94, Fhitragupta Qagar | Elambagh | Pucknow | Yttar Uradesh | India | 226009'

SET @delimiter ='|'
 
;WITH MyRows AS
(
	SELECT ID, 1 AS ColID, RTRIM(LTRIM(LEFT(SomeData, CHARINDEX(@delimiter, SomeData) -1))) AS MyValue, RIGHT(SomeData, LEN(SomeData) - CHARINDEX(@delimiter, SomeData)) AS Remainder
	FROM @t
	WHERE CHARINDEX(@delimiter, SomeData)>0
	UNION ALL
	SELECT ID, ColID+1 AS ColID, RTRIM(LTRIM(LEFT(Remainder, CHARINDEX(@delimiter, Remainder) -1))) AS MyValue, RIGHT(Remainder, LEN(Remainder) - CHARINDEX(@delimiter, Remainder)) AS Remainder
	FROM MyRows
	WHERE CHARINDEX(@delimiter, Remainder)>0
	UNION ALL
	SELECT ID, ColID+1 AS ColID, RTRIM(LTRIM(Remainder)) AS MyRow, NULL AS Remainder
	FROM MyRows
	WHERE CHARINDEX(@delimiter, Remainder)=0
)
INSERT INTO #tmp (ID, ColID, MyValue)
SELECT ID, ColID, MyValue
FROM MyRows
 
DECLARE @cols VARCHAR(300)
DECLARE @dt VARCHAR(2000)
DECLARE @pt VARCHAR(4000)

SET @cols = STUFF((SELECT DISTINCT '],[Col' + CONVERT(VARCHAR(10),ColID)
					FROM #tmp
			FOR XML PATH('')),1,2,'') + ']'

SET @dt = N'SELECT ID, ''Col'' + CONVERT(VARCHAR(30), ColID) AS ColName, MyValue
	FROM #tmp'
--EXEC(@dt)

SET @pt = N'SELECT ID, ' + @cols + ' ' + 
'FROM(' + @dt + ') AS DT ' +
'PIVOT(MAX(MyValue) FOR ColName IN(' + @cols + ')) AS PT'
EXEC(@pt)

DROP TABLE #tmp





结果:



Result:

ID      Col1                            Col2            Col3          Col4      Col5    Col6
1	563/90, Chitragupta Nagar	Alambagh	Lucknow	Uttar Pradesh	India	226005
2	564/91, Chitragupta Nagar	Balambagh	Mucknow	Vttar Rradesh	India	226006
3	565/92, Dhitragupta Oagar	Calambagh	Nucknow	Wttar Sradesh	India	226007
4	566/93, Ehitragupta Pagar	Dalambagh	Oucknow	Xttar Tradesh	India	226008
5	563/94, Fhitragupta Qagar	Elambagh	Pucknow	Yttar Uradesh	India	226009


这篇关于将管道从行拆分为COLUMN的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆