sql语句列转行的问题
发布网友
发布时间:2022-04-24 06:36
我来回答
共4个回答
热心网友
时间:2022-04-08 03:10
sqlserver2005及以上版本
CREATE TABLE test(id INT,[USER_ID] VARCHAR(10),door_id VARCHAR(50))
INSERT INTO dbo.test
( id, USER_ID, door_id )
SELECT 1,'U100174','0000000015;0000000018;;'
UNION ALL
SELECT 2,'U120225','0000000023;'
SELECT A.ID,USER_ID,B.door_id
FROM(
SELECT id,USER_ID,door_id = CONVERT(xml,'<root><v>' + REPLACE(door_id, ';', '</v><v>') + '</v></root>') FROM test
)A
OUTER APPLY(
SELECT door_id = N.v.value('.', 'varchar(100)') FROM A.door_id.nodes('/root/v') N(v)
)B
WHERE ISNULL(b.door_id,'')<>''
结果:
1U1001740000000015
1U1001740000000018
2U1202250000000023
热心网友
时间:2022-04-08 04:28
SQL查询如下, 需要SQL Server 2005或以上版本, 有支持XML
select ID,x.i.value('.', 'VARCHAR(20)') AS door_id
from (
SELECT
ID,
CAST('<i>' + REPLACE(door_id, ';', '</i><i>') + '</i>' AS XML) AS door_id
FROM view1
) s
CROSS APPLY door_id.nodes('i') x(i)
where len(x.i.value('.', 'VARCHAR(20)'))<>''
热心网友
时间:2022-04-08 06:03
行转列的情况比较的多,列转行的比较少貌似。追问能说点有用的吗?
热心网友
时间:2022-04-08 07:54
数据库第一范式是怎么说来的?追问你是说主键吗?
id 是 IDENTITY(INT,1,1) id 产生的
我是把user_id,door_id查出来然後加上IDENTITY(INT,1,1) id插到虚拟表裏面去的。
然後要将door_id列转行
追答第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。
已经不能分成多列,又怎么能分成行呢?