В таблице, как выбрать отдельные значения одного столбца, сохраняя ссылку на другой столбец? - PullRequest
0 голосов
/ 09 июля 2019

В моей таблице у меня есть CategoryID и ProductName, здесь CategoryID имеет повторяющиеся значения.Как выбрать ProductName с отличным идентификатором категории?

Я пробовал ответы на переполнение стека, которые выглядели одинаково, но ни один из них не помог.

    +++++++++++++++  ++++++++++++++
    + ProductName +  + CategoryID +
    +++++++++++++++  ++++++++++++++
        Mac                1
        HP                 3
        Walker             1
        Bell               2
        Dell               4   
        Lenovo             3
        Pixel              2

Результат должен быть

    +++++++++++++++  ++++++++++++++
    + ProductName +  + CategoryID +
    +++++++++++++++  ++++++++++++++
        Mac                1
        HP                 3 
        Bell               2
        Dell               4   

Ответы [ 3 ]

1 голос
/ 11 июля 2019

Попробуйте использовать Row_number с разделением по.Вот схема таблицы:

CREATE TABLE  docs (
  ProductName varchar(50) NOT NULL,
  CategoryID int  NOT NULL
) ;
INSERT INTO docs (ProductName ,CategoryID ) VALUES
  ('Mac', 1),
  ('HP', 3),
  ('Walker', 1 ),
  ('Bell', 2 ),
  ('Dell', 4 ),
  ('Lenova', 3),
  ('Pixel', 2)

Затем запустите, используя foll.запрос выбора:

SELECT ProductName, CategoryID 
from(
SELECT CategoryID, ProductName, 
row_number() over (partition by CategoryID order by ProductName ) as rn
from docs ) tab
where rn = 1;

Возвращает вывод как

+++++++++++++++  ++++++++++++++
+ ProductName +  + CategoryID +
+++++++++++++++  ++++++++++++++
    Mac                1
    Bell               2
    HP                 3 
    Dell               4   
0 голосов
/ 09 июля 2019

Вам нужно только group by categoryid и получить минимум (или максимум?) productname:

select categoryid, min(productname) as productname
from tablename
group by categoryid
0 голосов
/ 09 июля 2019

Я думаю, вы просите, чтобы категории содержали только один товар.Если это так, вы можете использовать агрегацию:

select categoryid, max(productname) as productname
from t
group by categoryid
having count(*) = 1;
...