SQL-запрос с группировкой Проблема

У меня есть SQL-запрос, который извлекает данные из SQL Server. Мне нужно сгруппировать поле (альфа-поле) и, если имеется более одной записи, отобразить «НЕТ СОВПАДЕНИЯ». Этот запрос поможет пользователям определить вакансии с отсутствующим альфа-значением.

Вот запрос для получения данных с группировкой:

select name,Alpha from T
where name = 'John'
GROUP BY name, Alpha

Вот результаты запроса:

name    Alpha
John    4
John    7
John    20

Я пытаюсь получить результат, чтобы сказать «НЕТ СОВПАДЕНИЯ», если данные не совпадают. В приведенном выше примере есть три записи, которые не совпадают. Как мне получить результат «Нет совпадений»? Если все записи совпадают, отобразите альфа-значение.

Вот ссылка на скрипт SQL, который я создал для примера:

http://sqlfiddle.com/#!18/ccd77/1/0

Задавая вопрос, вы должны предоставить минимальный воспроизводимый пример: (1) DDL и выборочное заполнение данных, т. е. таблицы CREATE плюс операторы INSERT T-SQL. (2) Что вам нужно сделать, т. е. логика и ваш код попытаются реализовать ее в T-SQL. (3) Желаемый результат, основанный на примерных данных в # 1 выше. (4) Ваша версия SQL Server (SELECT @@version;).

Yitzhak Khabinsky 05.04.2023 02:16

Я не понимаю. Кажется, они все совпадают, что значит не совпадают?

Charlieface 05.04.2023 04:11

@Charlieface значения альфа-канала в приведенном выше примере отличаются. Это 4,7 и 20. Я хочу отображать «НЕТ СОВПАДЕНИЯ», когда альфа-значения разные, и когда они одинаковы, чтобы отображать альфа-значение.

NBad901 05.04.2023 05:03
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я добавил еще две записи с одинаковым Alpha:

INSERT INTO t VALUES (26, 'Andy',  15) ;
INSERT INTO t VALUES (27, 'Andy',  15) ;

Вы можете использовать COUNT с DISTINCT, чтобы проверить, все ли значения одинаковы:

select name
      ,IIF(COUNT(DISTINCT Alpha) = 1, CAST(MAX(Alpha) AS VARCHAR(12)), 'No Matched') AS Alpha
from T
--where name = 'John'
GROUP BY name

дает:

IIF(MIN(Alpha) = MAX(Alpha) получает тот же результат и не требует сортировки по Alpha
Charlieface 05.04.2023 12:04
Ответ принят как подходящий

Возможно, более эффективно использовать MIN = MAX вместо COUNT(DISTINCT.

В данном случае это дает тот же результат, но не требует сортировки по Alpha.

SELECT
  name,
  IIF(MIN(Alpha) = MAX(Alpha), CAST(MAX(Alpha) AS VARCHAR(12)), 'No Matched') AS Alpha
FROM T
WHERE name = 'John'
GROUP BY
  name;

Другие вопросы по теме