Выберите все, кроме повторяющихся столбцов, если длина строки столбца не самая длинная - PullRequest
0 голосов
/ 10 мая 2018

У меня есть таблица со следующими столбцами:

strWord, strWordType, strWordDescription

Я бы хотел иметь возможность выбрать все строки, кроме тех, в которых есть дубликат strWordDescription. В случае дубликатов я хочу вернуть только те строки, в которых strWord имеет самую длинную длину. Это должно вступить в силу только в том случае, если strWordType одинаков.

Примечания: повторяющихся строк комбинаций strWords / strWordType не существует, только дубликаты strWordDescription для определенных типов strWordType. Я хотел бы избежать использования Distinct.

Пример: myTable

  strWord |    strWordType  |   strWordDescription |

  blue         2012               This is a color
  blue         2014               This is a color
  green        2012               This is a color
  ham          2014               This is a food
  chicken      2014               This is a food

Ожидаемые результаты:

   strWord  |   strWordType   | strWordDescription

   green        2012            This is a color
   blue         2014            This is a color
   chicken      2014            This is a food

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Только что решил -

SELECT MAX(mt.strWord),
       mt.strWordType,
       mt.strWordDescription


FROM myTable mt
GROUP BY mt.strWordType, mt.strWordDescription
ORDER BY MAX(mt.strWord)
0 голосов
/ 10 мая 2018

Хммм. , , на ум приходит коррелированный подзапрос:

select t.*
from t
where t.strword = (select top (1) t2.strword
                   from t t2
                   where t2.description = t.description and
                         t2.strWordType = t.strWordType
                   order by len(t2.strword) desc
                  );
...