如何为 Pivot SQL 服务器中定义的字段添加别名而不重复

How to alias fields defined in Pivot SQL Server without getting duplicates

我正在尝试弄清楚如何重命名我的旋转列。 IE 201601 到 1 月,201602 到 2 月等等

其余代码没问题。

当我将别名添加到 select 语句时,它会创建另一个带有月份名称的列,但会保留原始列,因此我最终得到 201601、201602 等,后面是一月、二月、三月列等

SELECT *, 

[201601] as January,  
[201602] as February,   
[201603] as March,   
[201604] as April,   
[201605] as May,   
[201606] as June, 
[201607] as July,     
[201608] as August,       
[201609] as September,    
[201610] as October,       
[201611] as November,   
[201612] as December


FROM (
SELECT  c.BLDGID AS 'BLDGID', 
        c.LEASID AS 'LEASID', 
        l.OCCPNAME AS 'OCCPNAME', 
        l.SUITID AS 'SUITID', 
        c.INCCAT AS 'INCCAT', 
        c.SRCCODE AS 'SRCCODE', 
        c.TRANAMT AS 'TRANAMT',
        c.PERIOD as 'PERIOD'
FROM SQLDATA.dbo.LEAS l
INNER JOIN SQLDATA.dbo.CMLEDG c
    ON l.BLDGID = c.BLDGID AND l.LEASID = c.LEASID
WHERE  c.BLDGID  ='85000' 
    AND c.INCCAT  ='RNT'  
    AND c.SRCCODE NOT LIKE 'CR'
    AND c.SRCCODE NOT LIKE 'PR'
    AND DESCRPTN NOT LIKE 'SECURITY APPLIED'


    AND c.PERIOD > '201512'
) as t
PIVOT (
SUM(TRANAMT) 
FOR PERIOD IN ([201601],[201602],[201603],[201604],[201605],[201606],[201607],[201608],[201609],[201610],[201611],[201612]) 




) revenueperspace

您得到了两列,因为您在第一行中使用了 SELECT *。你应该改用这个:

SELECT BLDGID, LEASID, OCCPNAME, SUITID, INCCAT, SRCCODE,
    [201601] as January,  
    [201602] as February,   
    [201603] as March,   
    [201604] as April,   
    [201605] as May,   
    [201606] as June, 
    [201607] as July,     
    [201608] as August,       
    [201609] as September,    
    [201610] as October,       
    [201611] as November,   
    [201612] as December

当然,明年会发生什么?您将不得不不断更新查询。有了这个,你可以避免:

SELECT *
FROM (
SELECT  c.BLDGID AS 'BLDGID', 
        c.LEASID AS 'LEASID', 
        l.OCCPNAME AS 'OCCPNAME', 
        l.SUITID AS 'SUITID', 
        c.INCCAT AS 'INCCAT', 
        c.SRCCODE AS 'SRCCODE', 
        c.TRANAMT AS 'TRANAMT', 
        DATENAME(MONTH, DATEADD(MONTH, CAST(SUBSTRING(c.PERIOD, 5, 2) AS INT), -1)) AS 'MONTH'
FROM SQLDATA.dbo.LEAS l
INNER JOIN SQLDATA.dbo.CMLEDG c
    ON l.BLDGID = c.BLDGID AND l.LEASID = c.LEASID
WHERE  c.BLDGID &SPARM01
    AND c.INCCAT &SPARM02 
    AND c.SRCCODE NOT LIKE 'CR'
    AND c.SRCCODE NOT LIKE 'PR'
    AND DESCRPTN NOT LIKE 'SECURITY APPLIED'
    AND c.PERIOD > '201512'
) as t
PIVOT (
SUM(TRANAMT) 
FOR MONTH IN ('January','February','March','April','May','June','July','August','September','October','November','December') 

) revenueperspace

第一个更改是将您的句点转换为月份名称,我在子查询中执行此操作(201606 -> 'June',例如 ),因此主元table 甚至不知道 yyyymm 格式存在。然后只需在用于数据透视表 table 的列表中使用您想要的月份即可。