ここでデータ型を推測し、変換するつもりはなかったと推測しますa1
->A1
など。
DECLARE @x TABLE(XMLFIELD XML);
INSERT @x SELECT '<word A="a1" B="b1" C="c1" />'
UNION ALL SELECT '<word A="a2" B="b2" C="c2" />'
UNION ALL SELECT '<word A="a3" B="b2" C="c3" />';
-- INSERT INTO dbo.OtherTable
SELECT
A = x.a.value('@A', 'varchar(32)'),
B = x.a.value('@B', 'varchar(32)'),
C = x.a.value('@C', 'varchar(32)')
FROM @x AS src
CROSS APPLY src.XMLFIELD.nodes('word') AS x(a);
結果:
A B C
------- ------- -------
a1 b1 c1
a2 b2 c2
a3 b2 c3
編集
そして、あなたが質問を完全に変更したので、私の答えは正気ではなく、あなたの質問とはまったく無関係に見えます。もう一度試してみましょう. ここでも、ロジックや要件を十分に説明していないため、ここでいくつか推測しています。B 列は、新しい値が表示されるたびに増加しますか? C列と同じ?連続した行にない重複がある可能性はありますか?
DECLARE @x TABLE(XMLFIELD XML);
INSERT @x SELECT '<word A="al" B="h" C="Ps" />'
UNION ALL SELECT '<word A="has" B="es" C="Pf" />'
UNION ALL SELECT '<word A="mom" B="es" C="Ph" />';
;WITH y AS
(
SELECT
word = x.a.value('@A', 'varchar(32)'),
n = ROW_NUMBER() OVER (ORDER BY x.a.value('@A', 'varchar(32)')),
B = x.a.value('@B', 'varchar(32)'),
C = x.a.value('@C', 'varchar(32)')
FROM @x AS src
CROSS APPLY src.XMLFIELD.nodes('word') AS x(a)
)
SELECT word,
A = 'A' + RTRIM(n),
B = 'B' + RTRIM((SELECT COUNT(*)+1 FROM y AS y2 WHERE n < y.n AND B <> y.B)),
C = 'C' + RTRIM((SELECT COUNT(*)+1 FROM y AS y2 WHERE n < y.n AND C <> y.C))
FROM y
ORDER BY word;
結果:
word A B C
------ ---- ---- ----
al A1 B1 C1
has A2 B2 C2
mom A3 B2 C3
問題を実際に解決する首尾一貫した答えが必要な場合は、問題をよく説明することに取り組む必要があります (間違った問題を解決するために多大な労力を費やす前に、最初に問題を正しく理解する必要があります)。