Проверить наличие отдельного столбца - PullRequest
0 голосов
/ 09 июля 2020

У меня есть таблица с именем Человек , в которой есть три столбца Имя, Обозначение, Адрес .

Мне нужно найти уникальную комбинацию Имя и Обозначение, если адрес повторяется, если да, мне нужно получить отметку как true else false.

Пример:

Name   Designation   Address
Alex     Manager     Houston
Alex     Manager     Houston
Bailey   Worker      Boston
Bailey   Worker      New York

O/P:
Name   Designation  Repeated 
Alex   Manager       true
Bailey Worker        false

Я знаю, пока я не могу сгруппировать столбцы, я попробовал вот так

select Name, Designation, Address
from Person 
group by Name, Designation, Address

Изменить: если Алекс имеет адрес « Phoenix », то результат будет таким же, то есть повторяющийся столбец будет « true » как У Алекс уже есть « Хьюстон », повторенное в двух строках.

Ответы [ 4 ]

1 голос
/ 09 июля 2020

Повторение означает, что количество различных адресов не соответствует общему. Итак:

select name, designation,
       (case when count(distinct Address) < count(*) then 'true' else 'false') as is_repeated
from person
group by name, designation;
1 голос
/ 09 июля 2020

Это простая группа по и подсчету:

select Name, Designation, case when count(*)>1 then 'true' else 'false' end as Repeated
from Person
group by Name, Designation
1 голос
/ 09 июля 2020

Вы можете попробовать следующий способ -

select Name,Designation,case when count(distinct Address)=1 then 'true' else 'false' end as repeated 
from Person 
group by Name,Designation
0 голосов
/ 09 июля 2020

И только потому, что всегда есть более одного способа написать запрос:

WITH cte_Counts AS
(
    SELECT      [Name]
                , [Designation]
                , [Address]
                , COUNT(*) AS [Count]
    FROM        Person
    GROUP BY    [Name]
                , [Designation]
                , [Address]
)
SELECT      [Name]
            , [Designation]
            , CASE
                WHEN [Count] > 1
                    THEN    'true'
                ELSE        'false'
            END AS [Repeated]
FROM        cte_Counts ;
...