나는 1 년 전, 지난 달 및 현재 달에서 데이터를 가져와야하는 상황이 있습니다. 이것을 달성하는 가장 좋은 방법은 무엇입니까?단일 쿼리에서 여러 계산을 수행하는 방법
나는 년, 월 및 데이터가 들어있는 테이블이 있습니다. 아래의 쿼리에서 필터를 추가했습니다. c.ReportMonth = DATENAME (월, @ 12MonthsAgo) 및 c.ReportYear = Year (@ 12MonthsAgo) 이것은 1 년 전입니다. 같은 방법으로 이전 달과 현재 달을 가져와야하는 경우 필터를 설정하여 동일한 쿼리에서이를 수행 할 수 있습니까? 어떻게해야합니까?
내가 3 개의 선택 쿼리를 작성한 다음 선택을 tmp 테이블에 넣고 나중에 테이블을 병합하는 것 이외의 다른 방법이 있습니까?
create table #TPTABLE
(
KPIName varchar(150)
,MetricName Varchar(200)
,MetricId INT
,DataSource varchar(50)
,[AnYearAgo] Float
,[PreviousMonth] float
,[CurrentMonth] float
);
insert into #TPTABLE
(KPIName,MetricName,MetricId,DataSource,[AnYearAgo])
SELECT
p.KPIName
,p.MetricName
,p.MetricId
,p.DataSource
,c.Value as [AnYearAgo]
FROM [IntegratedCare].[report].[KPIMetricDetails] p
LEFT JOIN [IntegratedCare].[report].[KPIMectricValues] c
ON p.[MetricId] = c.MetricId
WHERE c.ReportMonth = DATENAME(month, @12MonthsAgo) and c.ReportYear = Year(@12MonthsAgo)
ORDER BY KPI_Id ASC, [MetricId] ASC
나는 "년 전, 이전 월과 현재의 달"로 조금 혼란 스러워요하지만 당신은 변환해야처럼 소리 3 개의 필드를 적절한''datetime'' (또는''datetime2'')에 추가하고이를 기반으로 계산하십시오. – acfrancis
날짜 형식은 문제가되지 않습니다. 전년도, 올해는 작년에 계산할 수 있습니다. 12MonthsAgo AS DATE = DATEADD (mm, -12, ReportDate), 12 이전 월의 날짜 = DATEADD (mm, -1, ReportDate); 내 문제는 where 절에서 계산 된 날짜를 필터로 제공합니다. where c.ReportMonth = DATENAME (월, @ 12MonthsAgo) 및 c.ReportYear = Year (@ 12MonthsAgo) – user2919277
현재 월 및 전월과 같은 방식 . 그렇게하기 위해서는 2 개의 select를 작성하고 결과 테이블을 갱신해야합니다. 그래서 내 질문은, 거기에 더 많은 선택을 작성하는 것보다 더 좋은 방법입니다. 단일 쿼리에서이 작업을 수행 할 수 있습니까? – user2919277