SQL Server - выберите, если один из всех столбцов уникален - PullRequest
0 голосов
/ 10 ноября 2018

Я хочу выбрать, если одна строка, где несколько столбцов одинаковы. Например:

col1 col2 col3 col4

  a    b    1   2
  b    b    1   2
  a    c    1   2
  b    b    1   3
  a    c    2   1

Условие: выберите, только если значения столбцов (col1, col2, col3) отличаются от других строк, а значение col4 равно макс. Одинаковых строк.

Например, ожидаемый результат:

  a    b    1   2
  b    b    1   3
  a    c    1   2
  a    c    2   1

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Обязательное NOT EXISTS решение ... ваше условие записано как несуществующий запрос:

DECLARE @t TABLE (col1 varchar(100), col2 varchar(100), col3 int, col4 int);
INSERT INTO @t VALUES
('a', 'b', 1, 2),
('a', 'c', 1, 2),
('a', 'c', 2, 1),
('b', 'b', 1, 2),
('b', 'b', 1, 3);

SELECT *
FROM @t AS t
WHERE NOT EXISTS (
    SELECT 1
    FROM @t AS dup
    WHERE dup.col1 = t.col1
    AND   dup.col2 = t.col2
    AND   dup.col3 = t.col3
    AND   dup.col4 > t.col4 -- outer row has smaller col4
)

Демонстрация на DB Fiddle

0 голосов
/ 10 ноября 2018

Да возможно, просто используйте group by с max агрегацией как

with tab(col1,col2,col3,col4) as
(
  select 'a','b',1,2 union all
  select 'b','b',1,2 union all
  select 'a','c',1,2 union all
  select 'b','b',1,3 union all
  select 'a','c',2,1        
)
  select col1, col2, col3, max(col4) as col4
    from tab
   group by col1, col2, col3;

col1  col2  col3  col4
  a     b    1     2
  a     c    1     2
  a     c    2     1
  b     b    1     3

Rextester Demo

...