Estoy conectando tres tablas para obtener resultados usando una consulta de selección en SQL Server.
Mientras que la tabla de contactos contiene registros de contactos individuales, las otras dos tablas tienen múltiples registros para cada contacto. Básicamente, contiene las acciones que tiene la persona (como apple, microsoft, etc.) y los sectores que le interesan. La consulta de selección devuelve una fila para cada contacto cuando enviamos los criterios de búsqueda como 'Apple', 'Sector de la salud', etc. Ahora, en los resultados devueltos, me gustaría imprimir una columna con información sobre los criterios coincidentes.
Por ejemplo
----------------------------------------------------
Contact id name email
----------------------------------------------------
1 John [email protected]
2 Bret [email protected]
3 Mike [email protected]
Ticker id contact_id Ticker
---------------------------------------------------
1 1 APPLE
2 1 MCSFT
3 2 GOOGLE
4 3 APPLE
Sector id contact_id Sector
---------------------------------------------------
1 1 Health
2 2 Retail
3 2 FMCG
4 3 FMCG
La consulta es:
select
id, name, email, reason
from
contact
where
id in (select ttemp.contact_id
from ticker ttemp
where ttemp.ticker in ('GOOGLE'))
or id in (select stemp.contact_id
from sector stemp
where stemp.sector in ('FMCG'))
Ahora devuelve el contacto 2 (Bret) y 3 (Mike). Me gustaría imprimir "GOOGLE, FMCG" para Bret y "FMCG" para Mike en la columna del motivo .
Espero tener claro esto. ¿Alguna sugerencia amigos?
Creo que usaría una subconsulta:
select id, name, email, reason,
stuff( coalesce(',' + ticker, '') + coalesce(',' + sector),
1, 1, ''
)
from (select c.*,
(case when id in (select ttemp.contact_id
from ticker ttemp
where ttemp.ticker in ('GOOGLE')
)
then 'GOOGLE'
end) as ticker,
(case when id in (select stemp.contact_id
from sector stemp
where stemp.sector in ('FMCG')
)
then 'FMCG'
end) as sector
from contact c
) c
where ticker is not null or sector is not null;
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras