[英]TSQL statement to iterate over XML nodes in field
我有2個字段,其中包含隨機值列表,其中列表以空格分隔
field1,field2
2 4 8 4,A B C B
字段中的值和計數是隨機的(A不總是在字段2的索引1中,因此它可以是
field1,field2
2 8,B A
唯一一致的是AB C.我需要的是總結值並創建列到目前為止我有這個
SELECT
CAST (N'<H><r>' + REPLACE([field1], ' ', '</r><r>') + '</r></H>' AS XML) AS [vals],
CAST (N'<H><r>' + REPLACE([field], ' ', '</r><r>') + '</r></H>' AS XML) AS [cols]
FROM tt
由於某種原因,我不能使用這樣的變量
DECLARE @A
Select
CASE WHEN
[cols].value('count(/H/r)[1]','VARCHAR(100)') = 'A' THEN @A = @A + [vals].value('count(/H/r)[1]','VARCHAR(100)') END
from .....
我迷路了我甚至無法為變量分配值並在TSQL中返回數據我在SELECT語句中嘗試了WHILE循環而沒有運氣
這個有用的任何幫助
也許你不需要while循環?
WITH cte AS (
SELECT
--Generate an identifier for each row (if none exists)
row_id = ROW_NUMBER() OVER(ORDER BY (SELECT 1))
,vals = CAST (N'<val>' + REPLACE([field1], ' ', '</val><val>') + '</val>' AS XML)
,cols = CAST (N'<col>' + REPLACE([field2], ' ', '</col><col>') + '</col>' AS XML)
FROM tt
)
SELECT
row_id
,col_id = col.value('.','varchar(max)')
,value = val.value('.','varchar(max)')
FROM cte
CROSS APPLY vals.nodes('val') v(val)
OUTER APPLY cols.nodes('col') c(col)
WHERE
--Get the node position by counting the preceding siblings. Only return rows where val position equals col position.
val.value('for $i in . return count(../*[. << $i]) + 1', 'int') = col.value('for $i in . return count(../*[. << $i]) + 1', 'int')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.