<MatchKeys> <fuzzyKeys> <key key1="MatchKey_PostOut" key2="MatchKey_Name1" /> <key key1="MatchKey_Name1" key2="MatchKey_PhoneticStreet" key3="MatchKey_PhoneticCompanyName"/> <key key1="MatchKey_PostOut" key2="MatchKey_PostIn" /> </fuzzyKeys> </MatchKeys>
with cteMatchKeys (MatchKey_Group, MatchKey_ID, KeyColumn)as(select 1, 1, 'MatchKey_PostOut' union allselect 1, 2, 'MatchKey_Name1' union allselect 2, 1, 'MatchKey_Name1' union allselect 2, 2, 'MatchKey_PhoneticStreet' union allselect 2, 3, 'MatchKey_PhoneticCompanyName' union allselect 3, 1, 'MatchKey_PostOut' union allselect 3, 2, 'MatchKey_PostIn')select * from cteMatchKeys
DECLARE @x XML ='<MatchKeys> <fuzzyKeys> <key key1="MatchKey_PostOut" key2="MatchKey_Name1" /> <key key1="MatchKey_Name1" key2="MatchKey_PhoneticStreet" key3="MatchKey_PhoneticCompanyName"/> <key key1="MatchKey_PostOut" key2="MatchKey_PostIn" /> </fuzzyKeys> </MatchKeys>';SELECT DENSE_RANK() OVER(ORDER BY x1.r1) AS MatchKey_Group, ROW_NUMBER() OVER(PARTITION BY x1.r1 ORDER BY x2.r2) AS MatchKey_ID, x2.r2.value('.','VARCHAR(30)') AS KeyColumnFROM @x.nodes('/MatchKeys/fuzzyKeys/key') AS x1(r1)CROSS APPLY x1.r1.nodes('@*') AS x2(r2);
DECLARE @xmlData XMLSET @xmlData = ('<MatchKeys> <fuzzyKeys> <key key1="1" key2="1" key3="MatchKey_PostOut" /> </fuzzyKeys> <fuzzyKeys> <key key1="1" key2="2" key3="MatchKey_Name1" /> </fuzzyKeys> <fuzzyKeys> <key key1="2" key2="1" key3="MatchKey_Name1" /> </fuzzyKeys> <fuzzyKeys> <key key1="2" key2="2" key3="MatchKey_PhoneticStreet" /> </fuzzyKeys> <fuzzyKeys> <key key1="2" key2="3" key3="MatchKey_PhoneticCompanyName" /> </fuzzyKeys> <fuzzyKeys> <key key1="3" key2="1" key3="MatchKey_PostOut" /> </fuzzyKeys> <fuzzyKeys> <key key1="3" key2="2" key3="MatchKey_PostIn" /> </fuzzyKeys></MatchKeys>')SELECT x.ref.value('@key1[1]', 'int') AS MatchKey_Group, x.ref.value('@key2[1]', 'int') AS MatchKey_ID, x.ref.value('@key3[1]', 'varchar(50)') AS KeyColumnFROM @xmlData.nodes('/MatchKeys/fuzzyKeys/key') AS x( ref )
DECLARE @xmlData XML ='<MatchKeys> <fuzzyKeys> <key key1="MatchKey_PostOut" key2="MatchKey_Name1" /> <key key1="MatchKey_Name1" key2="MatchKey_PhoneticStreet" key3="MatchKey_PhoneticCompanyName"/> <key key1="MatchKey_PostOut" key2="MatchKey_PostIn" /> </fuzzyKeys> </MatchKeys>';;WITH XML_Unveiled AS ( SELECT MatchKey_Group=ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), x.ref.value('@key1[1]', 'varchar(50)') AS Key1, x.ref.value('@key2[1]', 'varchar(50)') AS Key2, x.ref.value('@key3[1]', 'varchar(50)') AS Key3 FROM @xmlData.nodes('/MatchKeys/fuzzyKeys/key') AS x( ref ))SELECT MatchKey_Group, MatchKey_ID, KeyColumnFROM XML_UnveiledCROSS APPLY ( VALUES (1, Key1),(2,Key2),(3,Key3)) a (MatchKey_ID, KeyColumn)WHERE KeyColumn IS NOT NULL ORDER BY MatchKey_Group, MatchKey_ID