如何在列中转换行 [英] How to convert a row in column

查看:80
本文介绍了如何在列中转换行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



1

1

1

2

2





现在我想把它插入到另一张这样的桌子



col1 col2 col3 col4 col5

1 1 1 2 2



然后替换1 ---> Y和2 - > N $ / $


我尝试过:



SELECT col1,col2, col3,col4,col5,col6,col7,col8,col9,col10,col11,col12,col13,col14,col15

FROM(

select * from Split('1 :1:1:1:1:1:2:2:1:2:1:1:2:1:1:',':')

)书籍

PIVOT(

FOR select * from Split('1:1:1:1:1:1:2:2:1:2:1:1:2:1:1: ',':')IN(col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,col12,col13,col14,col15)

)结果;

row
1
1
1
2
2


now I want to insert this to another table like this

col1 col2 col3 col4 col5
1 1 1 2 2

and then replace 1 --->Y and 2-->N

What I have tried:

SELECT col1, col2, col3, col4,col5,col6,col7,col8,col9,col10,col11,col12,col13,col14,col15
FROM (
select * from Split('1:1:1:1:1:1:2:2:1:2:1:1:2:1:1:',':')
) Books
PIVOT (
FOR select * from Split('1:1:1:1:1:1:2:2:1:2:1:1:2:1:1:',':') IN (col1, col2, col3, col4,col5,col6,col7,col8,col9,col10,col11,col12,col13,col14,col15)
) Result;

推荐答案

尝试以下,

/ *

; WITH CTE

AS



SELECT 1 AS RW UNION ALL

SELECT 1 AS R W UNION ALL

SELECT 1 AS RW UNION ALL

SELECT 2 AS RW UNION ALL

SELECT 2 AS RW



SELECT * INTO #A来自CTE

* /

将结果集插入#A临时表(RW - 列名)

SELECT * FROM #A



然后执行以下内容,



ALTER TABLE #A ADD ID INT IDENTITY(1,1)

ALTER TABLE #A ADD CN VARCHAR(10)



UPDATE #A SET CN ='Col'+ CAST(ID AS VARCHAR(10))



DECLARE @cols AS NVARCHAR(MAX),

@查询AS NVARCHAR(MAX)



选择@cols = STUFF((SELECT','+ QUOTENAME(CN)

来自#A

由CN组成,id

按ID排序

FOR XML PATH(''),TYPE

)。值('。','NVARCHAR(MAX)')

,1,1,'')



set @query ='选择 '+ @cols +'来自



选择案例,当RW = 1那么'+ CHAR(39)+'Y'+ CHAR(39)+'ELSE' + CHAR(39)+'N'+ CHAR(39)+'END AS RW,CN

来自#A

)x

枢轴



max(RW)

for CN in('+ @cols +')

) p $



执行(@query)
try the below,
/*
;WITH CTE
AS
(
SELECT 1 AS RW UNION ALL
SELECT 1 AS RW UNION ALL
SELECT 1 AS RW UNION ALL
SELECT 2 AS RW UNION ALL
SELECT 2 AS RW
)
SELECT * INTO #A FROM CTE
*/
Insert your result set into #A temp table (RW - column name)
SELECT * FROM #A

Then execute the below,

ALTER TABLE #A ADD ID INT IDENTITY(1,1)
ALTER TABLE #A ADD CN VARCHAR(10)

UPDATE #A SET CN = 'Col' + CAST(ID AS VARCHAR(10))

DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME(CN)
from #A
group by CN, id
order by id
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')

set @query = 'SELECT ' + @cols + ' from
(
select CASE WHEN RW = 1 THEN '+CHAR(39)+'Y'+CHAR(39)+' ELSE '+CHAR(39)+'N'+CHAR(39)+' END AS RW, CN
from #A
) x
pivot
(
max(RW)
for CN in (' + @cols + ')
) p '

execute(@query)


这篇关于如何在列中转换行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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