Назначение «Да/Нет» для каждого StudyId

Я использую SQL Server 2016.

Я работаю над назначением «Y» или «N» столбцу GLP со следующим условием:

  • «Да», если одно из значений GLP = «FDA». Возможно, что у одного StudyId есть GLP = FDA, но есть и GLP = not applicable, но большинство из них не попадает в эту категорию. В этом случае это все равно будет «Y», так как у него есть «GLP - FDA».

У меня есть этот код, который успешно получает типы GLP и назначает «Y» или «N» для каждого исследования:

SELECT DISTINCT 
    StudyId,
    GLP = CASE
              WHEN GLP IN ('non-GLP', 'Not Applicable') 
                   OR GLP IS NULL 
                  THEN 'N'
                  ELSE 'Y'
          END
FROM 
    AgenciesTable

Этот код возвращает:

Идентификатор исследованияGLP
123456Д
123456Н
456789Н
123456Д

Я хочу:

Идентификатор исследованияGLP
123456Д
456789Н

Но я не знаю, что бы я сделал, чтобы получить только одно «Y» или одно «N» на StudyId с условиями, которые я указал выше. Я попытался сделать подзапрос, который будет выглядеть примерно так:

SELECT 
    StudyId, 
    COUNT(GLP) AS TOT = CASE
                            WHEN TOT >= 2 THEN 'Y'
                            ELSE 'N'
                        END
FROM 
    (SELECT DISTINCT 
         StudyId,
         GLP = CASE
                   WHEN GLP IN ('non-GLP', 'Not Applicable') 
                        OR GLP IS NULL 
                       THEN 'N'
                       ELSE 'Y'
               END
     FROM AgenciesTable AT) 

Не повезло с вышеизложенным, но я чувствую, что иду в правильном направлении. Не знаю, что делать, чтобы продвинуть это. Я мог бы упустить что-то простое или слишком много думать об этом, но я не могу понять это.

Любая помощь, разъяснения или общие идеи приветствуются. Спасибо!

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

Ответы 1

Ответ принят как подходящий

Почему бы не использовать условную агрегацию?

Пример

SELECT StudyId
      ,GLP = max( CASE WHEN GLP IN ('non-GLP', 'Not Applicable') OR GLP IS NULL THEN 'N'  ELSE 'Y'  END)
FROM AgenciesTable
Group By StudyId

Полученные результаты

StudyId GLP
123456  Y
456789  N

Это сработало. Я даже не думал использовать это, хотя, как ни странно, я делаю MAX(CASE DT.Detail WHEN 'Notes' THEN DT.Comments END) Notes в другой части моего запроса. Спасибо вам за помощь!

Krasnips 18.03.2022 18:46

@Krasnips Всегда рад помочь

John Cappelletti 18.03.2022 18:47

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