SQL Server подсчитывает ту же функцию агрегирования результатов

#sql-server #database

#sql-сервер #База данных

Вопрос:

Я использую SQL Server, и это моя текущая таблица:

ID ref_id ( идентификатор ссылки ) Наркотик
1 1 Препарат А
2 1 Препарат В
3 2 Препарат А
4 2 Препарат В
5 3 Препарат С

Когда я запускаю этот код

 SELECT
    ap.ref_id, 
    STRING_AGG(ap.Drug, ' ') WITHIN GROUP (ORDER BY ap.Drug) AS groups
FROM
    myTable AS ap
GROUP BY 
    ap.ref_id
 

На выходе получается

ref_id ( идентификатор ссылки ) Наркотик
1 Препарат А Препарат В
2 Препарат А Препарат В
3 Препарат С

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

Подсчет Наркотик
2 Препарат А Препарат В
1 Препарат С

есть какие-нибудь предложения? или что-то не так с моей логикой?

Комментарии:

1. если в результирующем наборе одинаковые лекарства, то какой ref_id вам нужно учитывать? или просто вам нужно подсчитать это?

Ответ №1:

 SELECT DISTINCT 
    COUNT(*) AS [Count],
    STRING_AGG(ap.Drug, ' ') AS Drug
FROM  myTable AS ap
GROUP  BY ap.ref_id
ORDER BY [Count] DESC
 

Комментарии:

1. большое вам спасибо, вы тоже спасли мне жизнь! ~

2. Хорошо 🙂 . Пожалуйста, отметьте в качестве ответа, если это решило вашу проблему.

Ответ №2:

Я думаю, что в этом случае вам нужно полагаться на подзапрос, например :

 SELECT 
   COUNT(ap2.ref_id), 
   ap2.groups
FROM (
  SELECT
    ap.ref_id , 
    STRING_AGG(ap.Drug, ' ') WITHIN GROUP (ORDER BY ap.Drug) AS groups
  FROM
    myTable AS ap
  GROUP BY 
    ap.ref_id
) ap2
GROUP BY groups
 

Вот скрипка, если вы хотите попробовать это самостоятельно.

Мне было бы интересно узнать, придумал ли кто-нибудь более простое решение.

Комментарии:

1. Ну, пожалуйста, но я думаю, что eriksv88 на самом деле придумал лучший ответ