Identifique la cláusula where que devuelve una fila específica en la consulta de selección en SQL Server

Jerokdeep

Estoy conectando tres tablas para obtener resultados usando una consulta de selección en SQL Server.

  1. Mesa de contacto
  2. Tabla de teletipo
  3. Tabla de sector

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?

Gordon Linoff

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

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados