如何为 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 的列表中使用您想要的月份即可。
我正在尝试弄清楚如何重命名我的旋转列。 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 的列表中使用您想要的月份即可。