Как выбрать несколько столбцов при установке одного из них как DISTINCT? - PullRequest
0 голосов
/ 09 октября 2019

У меня есть 6 столбцов, и я хочу выбрать из них данные при фиксировании одного столбца как отдельного

Column1 |Column2         |Column3       |Column4     |Column5     |Column6
--------|----------------|--------------|------------|------------|-------
 A      |267             |2364          |001         |345.000000  |22
 B      |267             |2364          |001         |700.000000  |22
 C      |267             |2364          |001         |345.000000  |22
 D      |267             |2364          |001         |1200.000000 |22
 E      |267             |2364          |001         |1350.000000 |22
 F      |267             |2364          |001         |345.000000  |22
 A      |267             |2364          |002         |270.000000  |22
 B      |267             |2364          |002         |2300.000000 |22
 C      |267             |2364          |002         |270.000000  |22

. Отображение должно быть следующим:

Column1 |Column2         |Column3       |Column4     |Column5       |Column6
--------|----------------|--------------|------------|--------------|-------
A       |267.000000     |2364.000000      |001        |345.000000   |22
B       |267.000000     |2364.000000      |001        |700.000000   |22
C       |267.000000     |2364.000000      |001        |345.000000   |22
D       |267.000000     |2364.000000      |001        |1200.000000  |22
E       |267.000000     |2364.000000      |001        |1350.000000  |22
F       |267.000000     |2364.000000      |001        |345.000000   |22

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Несмотря на то, что мне нравится Тим TOP 1 WITH TIES (+1), следует отметить, что подзапрос или CTE будет более производительным. Особенно, если у вас большой стол ... маленькие столы, любая разница будет непостижимой.

Ваш желаемый DISTINCT неясен, поэтому мои Partition By и Order By - это предположение

Пример

 Select *
  From (
         Select *
               ,RN = row_number() over (Partition By Column1 Order By Column4)
          From  YourTable
       ) A
  Where RN = 1
1 голос
/ 09 октября 2019

Использование ROW_NUMBER и TOP:

SELECT TOP 1 WITH TIES Column1, Column2, Column3, Column4, Column5, Column6
FROM yourTable
ORDER BY ROW_NUMBER() OVER (PARTITION BY Column1, Column2, Column3 ORDER BY Column4);

Но это предполагает, что второй и третий столбцы являются частью того, что определяет «группу» в ожидаемом наборе результатов. Если вместо этого только Column1 решит, то используйте эту версию:

SELECT TOP 1 WITH TIES Column1, Column2, Column3, Column4, Column5, Column6
FROM yourTable
ORDER BY ROW_NUMBER() OVER (PARTITION BY Column1 ORDER BY Column4);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...