I need to create a census table where I have a row for each hour between start and end times. I created a temporary table to get the start and end time and then a cte with a union to get each hour between those times. but I get separate queries as the result. please help
below is my script:
USE CLARITY
GO
/******* GET THE LIST OF ACCOUNTS WITH ADMIT AND DISCHARGE TIME**************/
DECLARE @i INT;
DECLARE @NUMROWS AS INT;
DECLARE @ACCOUNTLST AS TABLE
(
IDX INT PRIMARY KEY IDENTITY(1,1)
,HSP_ACCOUNT_ID INT
,HSP_ADMSN_TIME DATETIME
,HSP_DISCHRG_TIME DATETIME
);
INSERT @ACCOUNTLST
SELECT HSP_ACCOUNT_ID
,HOSP_ADMSN_TIME
,HOSP_DISCHRG_TIME
FROM PAT_ENC
WHERE HOSP_ADMSN_TIME IS NOT NULL
AND HSP_ACCOUNT_ID IS NOT NULL
AND HOSP_DISCHRG_TIME IS NOT NULL
--SELECT *
--FROM @ACCOUNTLST
SET @i =1
SET @NUMROWS =(
SELECT COUNT(*)
FROM @ACCOUNTLST
)
IF @NUMROWS> 0
WHILE (@i <= (
SELECT MAX(IDX)
FROM @ACCOUNTLST
)
)
BEGIN
;WITH CTE AS
(
SELECT
HSP_ACCOUNT_ID
,HSP_ADMSN_TIME 'CENSUSTIME'
,HSP_DISCHRG_TIME 'ENDTIME'
FROM
@ACCOUNTLST
WHERE
IDX=@i
UNION ALL
--HSP_ACCOUNT_ID
SELECT HSP_ACCOUNT_ID
,DATEADD(HH,1,CENSUSTIME)
,ENDTIME
FROM CTE
WHERE CENSUSTIME <=ENDTIME
)
SELECT *
FROM CTE
OPTION (MAXRECURSION 0)
SET @i=@i+1
END
↧