Sql server 只需选择以“开始”开头的属性值;名称“;和条件检查

Sql server 只需选择以“开始”开头的属性值;名称“;和条件检查,sql-server,xml,Sql Server,Xml,请就以下XML数据提出建议: <data> <x name="name0">val1</x> <x name="other0">Yes</x> <x name="name1">val2</x> <x name="other1">Yes</x> <x name="name2">val3</x> <x name="other2">No</x> &

请就以下XML数据提出建议:

<data>
<x name="name0">val1</x>
<x name="other0">Yes</x>
<x name="name1">val2</x>
<x name="other1">Yes</x>
<x name="name2">val3</x>
<x name="other2">No</x>
<x name="name3">val4</x>
<x name="other3">No</x>
...
...
</data>

瓦尔1
对
瓦尔2
对
val3
不
瓦尔4
不
...
...

只需为0,1,2,3选择以“name”开头的属性值。。。其各自的“其他”值0,1,2,3为“是”…0,1,2,3上的端到端映射。。。对于基于“是”或“否”的“名称”和“其他”,这是一个完整的设计

如果XML的创建在您的控制之下,那么您真的应该将其更改为

<data>
  <x val1="SomeName" val2="SomeOtherValue">
</data>

是的,这是错误的xml,但属于旧的代码库,无法更改。顺便说一句,谢谢works@Satty:如果答案满足您预期结果的要求,那么接受它将被认为是礼貌的。
<data>
  <x val1="SomeName" Number="1" val2="SomeOtherValue">
</data>
DECLARE @xml XML=
'<data>
<x name="name0">val1</x>
<x name="other0">Yes</x>
<x name="name1">val2</x>
<x name="other1">Yes</x>
<x name="name2">val3</x>
<x name="other2">No</x>
<x name="name3">val4</x>
<x name="other3">No</x>
</data>';

WITH Shredded AS
(
    SELECT x.value('@name','nvarchar(max)') AS x_name
          ,PATINDEX('%[0-9]%',x.value('@name','nvarchar(max)')) AS PositionFirstNumber
          ,x.value('.','nvarchar(max)') AS x_value
    FROM @xml.nodes('/data/x') AS A(x)
)
,Splitted AS
(
    SELECT LEFT(x_name,PositionFirstNumber-1) AS columnName
          ,SUBSTRING(x_name,PositionFirstNumber,100) AS ColumnIndex
          ,x_value
    FROM Shredded
)
SELECT s1.x_value AS name_value
      ,(SELECT x_value FROM Splitted AS s2 WHERE s2.columnName='other' AND s1.ColumnIndex=s2.ColumnIndex) AS Corresponding_value

FROM Splitted AS s1 WHERE s1.columnName='name'
val1    Yes
val2    Yes
val3    No
val4    No