Запрос Tsql для поиска равных значений строк по столбцам

#tsql

#tsql

Вопрос:

У меня есть эта таблица

 col 1   col 2   col 3   ....    col N
-------------------------------------
1       A       B               fooa        
10      A       foo             cc
4       A       B               fooa
  

возможно ли с помощью запроса tsql возвращать только одну строку со значением только там, где все значения одинаковы?

 col 1   col 2   col 3   ....    col N
-------------------------------------
--      A       --              --
  

Ответ №1:

 SELECT
     CASE WHEN COUNT(col1) = COUNT(*) AND MIN(col1) = MAX(col1) THEN MIN(col1) END AS col1,
     CASE WHEN COUNT(col2) = COUNT(*) AND MIN(col2) = MAX(col2) THEN MIN(col2) END AS col2,
     ...
FROM yourtable
  

Вы должны учитывать нули в столбце:

  • COUNT(*) подсчитывает их
  • COUNT(col1) не учитывает их

То есть столбцы с сочетанием значений As и NULL не являются одним значением. MIN и MAX будут давать A, потому что они игнорируют NULL.

Редактировать:

  • удалено DISTINCT, чтобы получить одинаковые значения для проверки NULL
  • добавлена проверка MIN / MAX (согласно удаленному ответу Марка Байерса) для проверки уникальности