Tenho a seguinte estrutura:
Table R Table RZ (n-m) Table Z
------- ----------------- ---------
R1 R1 | Z1 Z1 | "A"
R2 R1 | Z2 Z2 | "B"
R3 R2 | Z1 Z3 | "C"
R4 R2 | Z3 Z4 | "D"
... R3 | Z1 ...
... R3 | Z2 ...
... R3 | Z4 ...
(Deixei de fora algumas complicações adicionais e outras junções para simplificar)
Preciso consultar todas as linhas de "R" com algumas das colunas ou "R" incluindo uma coluna no resultado que tenha a coluna "Nome" concatenada da tabela "Z".
Aqui está uma amostra seguindo o conteúdo da tabela acima:
ID of R | Name of Z
--------------------
R1 | "A,B"
R2 | "A,C"
R3 | "A,B,D"
Até agora, uma função escalar estava em vigor, usada por cada linha de R, consultando novamente a junção R-RZ-Z novamente, concatenando e retornando os nomes, mas percebi que isso é muito lento.
Tentei FOR XML, mas não consigo combinar o resultado XML entregando a string que desejo com o restante das colunas exigidas da tabela R.
Qual é a melhor maneira de resolver isso?
Tente com
CROSS APPLY
, assim:Resultado:
Algo assim deve funcionar: