您可以使用case
用于上述目的
SELECT PRODUCT_BK,
MONTH,
CASE [State] WHEN 'QLD' THEN 'Quensland'
WHEN 'SA_NT' THEN 'something else'
ELSE [State]
END AS [State],
Forecast
FROM (SELECT * FROM Forecast_Table) t
UNPIVOT (Forecast FOR State IN (SA_NT, QLD, VIC_TAS, WA, NSW_ACT)) AS fcst
,或者作为替代方式,您可以创建#temp_table
或在你的数据库@variable_table
或表格,填写此表与旧&新名称,并加入最终的输出与此表。
例如:
-- create variable table to store reference between old and new alias
DECLARE @Sometable AS TABLE
(
OldName NVARCHAR(10) ,
ShouldBeName NVARCHAR(20)
)
INSERT @Sometable
(OldName, ShouldBeName)
VALUES ('SA_NT', 'Some Name 1'),
('QLD', 'Some Name 2'),
('VIC_TAS', 'Some Name 3');
--final query
SELECT fcst.PRODUCT_BK ,
fcst.Month ,
COALESCE(S.ShouldBeName, fcst.[State]) AS [State] ,
fcst.Forecast
FROM (SELECT * FROM Forecast_Table) t
UNPIVOT (Forecast FOR State IN (SA_NT, QLD, VIC_TAS, WA, NSW_ACT)) AS fcst
LEFT JOIN @Sometable AS S ON fcst.[State] = S.OldName
或者是,即使是这样的:
SELECT fcst.PRODUCT_BK ,
fcst.Month ,
COALESCE(S.ShouldBeName, fcst.[State]) AS [State] ,
fcst.Forecast
FROM (SELECT * FROM Forecast_Table) t
UNPIVOT (Forecast FOR State IN (SA_NT, QLD, VIC_TAS, WA, NSW_ACT)) AS fcst
LEFT JOIN (SELECT *
FROM (VALUES ('SA_NT', 'Some Name 1'),
('QLD', 'Some Name 2'),
('VIC_TAS', 'Some Name 3')
) AS S (OldName, ShouldBeName)
) AS S ON fcst.[State] = S.OldName
你想要什么实际的聚合?你能展示预期的产出吗? –
想通了自己,谢谢你的时间堆积 – OZRiz