sql语句列转行的问题

发布网友

我来回答

4个回答

热心网友

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

热心网友

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)'))<>''

热心网友

行转列的情况比较的多,列转行的比较少貌似。追问能说点有用的吗?

热心网友

数据库第一范式是怎么说来的?追问你是说主键吗?
id 是 IDENTITY(INT,1,1) id 产生的
我是把user_id,door_id查出来然後加上IDENTITY(INT,1,1) id插到虚拟表裏面去的。
然後要将door_id列转行

追答第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。
已经不能分成多列,又怎么能分成行呢?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com