#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 на самом деле придумал лучший ответ