72 lines
2.3 KiB
Transact-SQL
72 lines
2.3 KiB
Transact-SQL
declare @val varchar(8000)
|
|
set @val = 'AA1,10.1;BB1,6.5'
|
|
|
|
/************************拆分成多行多列start***************************/
|
|
--v1.0
|
|
SELECT
|
|
rowSet.[1] AS 'MaterialId'
|
|
,rowSet.[2] AS 'Qty'
|
|
,rowSet.[3] AS 'StockId'
|
|
,rowSet.[4] AS 'dateTime'
|
|
FROM (
|
|
SELECT
|
|
CAST('<v>'+ REPLACE(rowSet.resVal,',','</v><v>') + '</v>' AS XML) AS xmlVal
|
|
,ROW_NUMBER() over (order by resVal) RN
|
|
FROM (
|
|
SELECT CAST('<v>'+ REPLACE('AA1,10.1;BB1,16.5',';','</v><v>') + '</v>' AS XML) AS xmlVal
|
|
) AS valSet
|
|
OUTER APPLY (
|
|
SELECT T.C.value('.','varchar(100)') resVal
|
|
FROM valSet.xmlVal.nodes('/v') AS T(C)
|
|
) rowSet
|
|
) AS valSet
|
|
OUTER APPLY (
|
|
SELECT TT2.*
|
|
FROM (
|
|
SELECT T.C.value('.','varchar(100)') resVal
|
|
,ROW_NUMBER() over (order by valSet.RN) RowNo
|
|
FROM valSet.xmlVal.nodes('/v') AS T(C)
|
|
) TT
|
|
PIVOT ( MAX(TT.resVal) FOR TT.RowNo IN ([1],[2],[3],[4])) TT2
|
|
) rowSet
|
|
--v2.0
|
|
SELECT
|
|
rowSet2.[1] AS 'MaterialId'
|
|
,rowSet2.[2] AS 'Qty'
|
|
,rowSet2.[3] AS 'StockId'
|
|
,rowSet2.[4] AS 'FDate'
|
|
,rowSet2.[5] AS 'FSBILLID'
|
|
,rowSet2.[6] AS 'FSID'
|
|
,rowSet2.[7] AS 'FSTABLENAME'
|
|
,0 AS 'HasVal'
|
|
FROM (
|
|
SELECT 1 ID,CAST('<v>'+ REPLACE('AA1,10.1;BB1,16.5',';','</v><v>') + '</v>' AS XML) AS xmlVal
|
|
) AS valSet
|
|
OUTER APPLY (
|
|
SELECT ROW_NUMBER() OVER (ORDER BY valSet.ID) RN
|
|
,CAST('<v>'+ REPLACE(T.C.value('.','varchar(100)'),',','</v><v>') + '</v>' AS XML) xmlVal
|
|
FROM valSet.xmlVal.nodes('/v') AS T(C)
|
|
) rowSet
|
|
OUTER APPLY (
|
|
SELECT * FROM (
|
|
SELECT T.C.value('.','varchar(100)') AS xmlVal
|
|
,ROW_NUMBER() OVER (ORDER BY rowSet.RN) RowNo
|
|
FROM rowSet.xmlVal.nodes('/v') AS T(C)
|
|
) TT
|
|
PIVOT ( MAX(TT.xmlVal) FOR TT.RowNo IN ([1],[2],[3],[4],[5],[6],[7])) TT2
|
|
) rowSet2
|
|
/************************拆分成多行多列end***************************/
|
|
|
|
/************************拆分成多行start***************************/
|
|
SELECT
|
|
rowSet.resVal
|
|
,rowSet.rowNo
|
|
FROM (
|
|
SELECT CAST('<v>'+ REPLACE('AA1,10.1;BB1,6.5',';','</v><v>') + '</v>' AS XML) AS xmlVal
|
|
) AS valSet
|
|
OUTER APPLY (
|
|
SELECT T.C.value('.','varchar(100)') resVal
|
|
,row_number() over (order by C) rowNo
|
|
FROM valSet.xmlVal.nodes('/v') AS T(C)
|
|
) rowSet
|
|
/************************拆分成多行end***************************/ |