Sql server 是否可以运行while循环来创建动态选择列
我需要在查询中动态创建select列。 我知道我做错了,但不知道最好的方法是什么Sql server 是否可以运行while循环来创建动态选择列,sql-server,tsql,Sql Server,Tsql,我需要在查询中动态创建select列。 我知道我做错了,但不知道最好的方法是什么 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 PR
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)
最终结果如下所示:
您可以使用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以外的程序,而不必手动更改代码,那么这将不会灵活使用。为了适应这一点,您应该查看所讨论的动态透视查询。该查询应该回答哪些问题?表的模式是什么?查询是为了显示每个设施的程序参与者的数量。主表是包含所列设施的设施表、包含项目的项目表和包含项目参与者的参与者表