多くの列を 1 つにマージできるクエリが必要です。
たとえば、列に次の行があります。
'JOHNNY WALKER KILIAN JOURNET ANNA FROST'
'JOHNNY CUERVO KILIAN JOURNET ANNA FROST'
'JOHNNY WALKER KILIAN JONES ANNA FROST'
'JOHNNY WALKER KILIAN JOURNET EMELIE FROST'
次に、すべての行を1つにマージしたい:
'JOHNNY CUERVO KILIAN JONES EMELIE FROST'
これを行うことは可能ですか?これは、動的クエリを実行しようとしているためです。条件は XML から取得されますが、XML から取得する条件の量がわからないため、CTE を使用して条件をループしようとしています。 XML を変更し、動的クエリを置き換えます。最後に、クエリといくつかの条件で多くの行を取得しています..違いをマージして類似性を維持する必要があります。
XML は次のとおりです。
<ROOT>
<PARAMETROS>
<USU_LOGIN>yleon</USU_LOGIN>
<USU_NOMBREPRIMERO>Yerusha</USU_NOMBREPRIMERO>
<USU_APELLIDOPRIMERO>Leon</USU_APELLIDOPRIMERO>
<USU_EMAIL>yleon@email.com.ve</USU_EMAIL>
<USU_FECHACREACION>20130510</USU_FECHACREACION>
<USU_CODICIONES1 TIPO="MC" MARCADOR="CONDICIONES1">AND USU_ID=1</USU_CODICIONES1>
<USU_CODICIONES2 TIPO="MC" MARCADOR="CONDICIONES2">AND USU_ID=2</USU_CODICIONES2>
<USU_CODICIONES3 TIPO="MC" MARCADOR="CONDICIONES3">AND USU_ID=3</USU_CODICIONES3>
<USU_CODICIONES4 TIPO="MC" MARCADOR="CONDICIONES4">AND USU_ID=4</USU_CODICIONES4>
<USU_CODICIONES5 TIPO="MC" MARCADOR="CONDICIONES5">AND USU_ID=5</USU_CODICIONES5>
<USU_CODICIONES6 TIPO="MC" MARCADOR="CONDICIONES6">AND USU_ID=6</USU_CODICIONES6>
</PARAMETROS>
</ROOT>
私のコードは次のとおりです。
DECLARE @XML AS XML
DECLARE @QUERY AS VARCHAR(MAX)
--Lectura del XML almacenado en la tabla SESIONESREPORTES
SET @XML = (SELECT TOP 1 SER_PARAMETROS FROM SESIONESREPORTES WHERE REP_ID = 4 AND SER_ID = 9)
SET @QUERY = 'SELECT * FROM USUARIOS WHERE 1=1 CONDICIONES1 CONDICIONES2 CONDICIONES3 CONDICIONES4 CONDICIONES5 CONDICIONES6'
SELECT T.Item.value('data(.)', 'varchar(255)') AS ELEMENTOSMC
, T.Item.value('data(@MARCADOR)', 'varchar(255)') AS MARCADOR
, REPLACE(@QUERY,T.Item.value('data(@MARCADOR)', 'varchar(255)'), T.Item.value('data(.)', 'varchar(255)')) AS QUERY2
, 0 n
FROM @xml.nodes('/ROOT/PARAMETROS/*') AS T(Item)
WHERE T.Item.value('data(@TIPO)', 'varchar(255)')='MC'