T-SQL для поиска строк с хотя бы одним конкретным значением столбца - PullRequest
0 голосов
/ 28 августа 2018

Набор данных

Key           Stage     balance   ForeignKey
---------------------------------------------
11805008       ABC         50      123
11805008       DEF          0      123  
14567898       DEF        100      456 

Запрос до сих пор

Select key, two.Stage, two.balance 
from table_a one, table_b two
where one.ForeignKey = two.foreignKey

Я ищу ключи, этап и баланс, где ключ имеет этап ABC и другие. Если ключ не имеет стадии ABC, он не должен возвращать ни одной строки для этого ключа. Но если этот ключ имеет стадию 'ABC', он должен вернуть все строки для этого ключа

Key           Stage     balance   ForeignKey
11805008       ABC        50       123
11805008       DEF        0        123  

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Во-первых, научитесь использовать правильный JOIN синтаксис.

Во-вторых, вы можете сделать это с помощью оконных функций:

select key, stage, balance
from (Select key, two.Stage, two.balance,
             sum(case when two.stage = 'ABC' then 1 else 0 end) over (partition by key) as num_abc
      from table_a one join
           table_b two
           on one.ForeignKey = two.foreignKey
     ) t
where num_abc > 0;
0 голосов
/ 28 августа 2018
Select key, two.Stage, two.balance 
from table_a one
inner join table_b two
on one.foreignKey = two.foreignKey
where exists (
  select 1 from table_b x 
  where  x.foreignKey=one.foreignKey
  and x.Stage='ABC' )

Я могу только предположить, какие у вас исходные данные. Заявление работает на моем демо, см. Здесь: http://rextester.com/SUTS17842

0 голосов
/ 28 августа 2018

Вы можете использовать предложение IN, чтобы получить все ключи, имеющие хотя бы один этап ABC. Кроме того, используйте более современный синтаксис внутреннего соединения.

SELECT one.key, two.Stage, two.balance
FROM table_a one
INNER JOIN table_b two ON one.ForeignKey = two.foreignKey
WHERE key IN (
  SELECT key
  FROM table_a
  INNER JOIN table_b ON table_a.ForeignKey = table_b.foreignKey
  WHERE table_b.stage = 'ABC')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...