나는 SQL 서버에서 (현재 월까지 첫 달)과 같은 테이블을 만들고 싶어 :SQL Server 저장 프로 시저에서 쿼리를 사용하여 월별 보고서 테이블을 만드는 방법은 무엇입니까?
하지만 쿼리와 사투를 벌인거야.
저장 프로 시저를 사용하여 임시 테이블에 삽입하는 쿼리가 있는데 저장 프로 시저를 실행할 때 쿼리가 계속 실행됩니다.
이 내 저장 프로 시저입니다 :
ALTER PROCEDURE [dbo].[get_dashboard_bulan]
@month int,
@year int
AS
SET DATEFORMAT DMY
SET NOCOUNT ON
BEGIN
DECLARE @TEMP_TABLE TABLE (bulan int,
NOA int,
OSPENGAJUAN money,
OSDISETUJUI money,
NOABANDING int)
DECLARE @firstdate INT = 1,
@datenow INT= month ((select DATEADD(day, -1, DATEADD(month, @Month, DATEADD(year, @Year - 1900, 0))))),
@NOA INT = 0,
@OSPENGAJUAN MONEY = 0,
@OSDISETUJUI MONEY = 0,
@NOABANDING INT = 0
BEGIN TRY
IF @month = MONTH(GETDATE()) AND @year = YEAR(GETDATE())
BEGIN
SET @datenow = MONTH(GETDATE())
END
WHILE @firstdate <= @datenow
BEGIN
SET @NOA = (SELECT COUNT(tiket_id)
FROM m_tiket
WHERE MONTH(created_at) = @firstdate)
SET @OSPENGAJUAN = (SELECT SUM(plafond) AS plafond
FROM m_tiket
WHERE MONTH(created_at) = @firstdate)
SET @OSDISETUJUI = (SELECT SUM(plafond_disetujui) AS plafond_disetujui
FROM m_tiket
WHERE MONTH(created_at) = @firstdate)
SET @NOABANDING = (SELECT COUNT(tiket_id)
FROM m_track
WHERE status_id = 10 AND MONTH(created_at) = @firstdate)
INSERT INTO @TEMP_TABLE
VALUES (@firstdate, @NOA, @OSPENGAJUAN, @OSDISETUJUI, @NOABANDING);
SET @firstdate = month(DATEADD(DAY,1,@firstdate))+1
END
END TRY
BEGIN CATCH
END CATCH
END
SELECT
bulan, noa,
IIF(ospengajuan IS NULL, 0, ospengajuan) AS ospengajuan,
IIF(osdisetujui IS NULL, 0, osdisetujui) AS osdisetujui,
noabanding
FROM
@TEMP_TABLE
예, 올바르게 이해했습니다 :-). 'SELECT DATEADD (DAY, 1,1); '을 실행하면'1900-01-08 00 : 00 : 00.000'이 반환되어 문제를 설명하는 데 도움이됩니다. –