Можно ли запустить какое-то время l oop для создания динамических c выбранных столбцов - PullRequest
0 голосов
/ 28 февраля 2020

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

DECLARE @STARTDATE DATETIME
DECLARE @ENDDATE DATETIME

BEGIN
SELECT NAME AS  FACILITY ,
SUM(GROU1+GROUP2) AS FAC_COUNT,
--------------------ADD LOOOP HERE TO CREATE SELECT COLUMNS ?---
(SELECT COUNT(*) FROM PROGRAMS WHERE FACILITY_ID = FACILITY.ID AND PROGRAM_ID = @PROGRAM_ID
) AS PROGRAM_NAME   

----------------END LOOP?-------

FROM FACILITY
WHERE SUBTYPE IN (3,4,5)

конечный результат будет выглядеть так: enter image description here

1 Ответ

0 голосов
/ 28 февраля 2020

Вы можете сделать оператор PIVOT, но это также можно сделать с помощью условного агрегирования с использованием операторов CASE.

SELECT fac.NAME AS FACILITY
     , SUM(fac.GROUP1 + fac.GROUP2) AS FAC_COUNT
     , SUM(CASE WHEN PROGRAM_ID = 1 THEN 1 ELSE 0 END) AS [PROGRAM 1]
     , SUM(CASE WHEN PROGRAM_ID = 2 THEN 1 ELSE 0 END) AS [PROGRAM 2]
     , SUM(CASE WHEN PROGRAM_ID = 4 THEN 1 ELSE 0 END) AS [PROGRAM 4]
FROM FACILITY fac
INNER JOIN PROGRAMS pgms ON fac.ID = pgms.FACILITY_ID
WHERE fac.SUBTYPE IN (3,4,5)

Понятно, что это не сработает, если у вас есть Программы, отличные от 1, 2 или 4 без необходимости изменения кода вручную. Чтобы учесть это, вы должны посмотреть на динамический c PIVOT-запрос, обсужденный здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...