Вы можете создать функцию сделать это.
CREATE TABLE Customers
(
Inception datetime,
MON1_BASIC_FLAG int, MON2_BASIC_FLAG int, MON3_BASIC_FLAG int, MON4_BASIC_FLAG int,
MON5_BASIC_FLAG int, MON6_BASIC_FLAG int, MON7_BASIC_FLAG int, MON8_BASIC_FLAG int,
MON9_BASIC_FLAG int, MON10_BASIC_FLAG int, MON11_BASIC_FLAG int, MON12_BASIC_FLAG int
)
INSERT INTO Customers VALUES ('2010-01-01', 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
GO
CREATE FUNCTION TenureBand(@startDate datetime, @endDate datetime)
RETURNS varchar(5)
BEGIN
DECLARE @diff int
SELECT @diff = DATEDIFF(month, @startDate, @endDate)
RETURN CASE
WHEN @diff < 12 then '<1yr'
WHEN @diff BETWEEN 12 AND 36 THEN '1-3yr'
WHEN @diff BETWEEN 36 AND 60 THEN '3-5yr'
ELSE '>5yr'
END
END
GO
SELECT Inception,
[01] - [02] as [M01], [02] - [03] as [M02], [03] - [04] as [M03],
[04] - [05] as [M04], [05] - [06] as [M05], [06] - [07] as [M06],
[07] - [08] as [M07], [08] - [09] as [M08], [09] - [10] as [M09],
[10] - [11] as [M10], [11] - [12] as [M11]
INTO #TempTable
FROM (
SELECT Inception,
SUM(MON1_BASIC_FLAG) as [01], SUM(MON2_BASIC_FLAG) as [02],
SUM(MON3_BASIC_FLAG) as [03], SUM(MON4_BASIC_FLAG) as [04],
SUM(MON5_BASIC_FLAG) as [05], SUM(MON6_BASIC_FLAG) as [06],
SUM(MON7_BASIC_FLAG) as [07], SUM(MON8_BASIC_FLAG) as [08],
SUM(MON9_BASIC_FLAG) as [09], SUM(MON10_BASIC_FLAG) as [10],
SUM(MON11_BASIC_FLAG) as [11], SUM(MON12_BASIC_FLAG) as [12]
FROM Customers
GROUP BY Inception
) p
SELECT Inception,
[#TempTable] as [MonthNumber],
dbo.TenureBand(Inception, getdate()) AS [TenureBand], [Churn]
FROM ( SELECT Inception,
[M01], [M02], [M03], [M04], [M05], [M06],
[M07], [M08], [M09], [M10], [M11]
FROM #TempTable
) pvt
UNPIVOT ( [Churn] FOR #TempTable IN
( [M01], [M02], [M03], [M04], [M05], [M06],
[M07], [M08], [M09], [M10], [M11])
) as unpv