2016-09-03 5 views
1

ピボット列の名前を変更する方法を理解しようとしています。 IE201601〜1月、201602〜2月などピボットSQL Serverで定義されている、重複のないフィールドのエイリアス

残りのコードは問題ありません。

私はselect文にエイリアスを追加すると、それは

など、月名で別の列を作成しますが、列の1月、2月に続くので、私は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 
+0

'選択を試みましたか? 。 。、[201601]は1月として、。 。 。 '? –

+0

はい、Januaryという名前の列が作成されますが、201601という名前の列は残されます – SQLISHARD

+0

- 単純な例です。これはいくつかの理由から望ましいものです。 –

答えて

1

最初の行に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 - たとえば用>「6月」、)、そうピボットテーブルはyyyymm形式が存在することさえ知りません。ピボットテーブルに使用されているリストで必要な月を使用するだけです。

+0

ありがとうアンドリュー、私は月曜日にこれらを見直します。私はTRANAMTがPivotの一部として削除された後、最初のものが動作することを知っていますが、私は2番目のもので他のエラーを受け取りました。私はあなたの援助に感謝します。 – SQLISHARD

+0

あなたはそのフィールドについて正しいです、それは集約されたものなので、SELECTから削除しました。あなたがそれをテストすることができずにあなたの質問を修正したので、いくつかの問題があるかもしれません。私は、このためにテーブル構造を推測して複製する時間がありませんでした。 :)私はあなたが2番目の作品を作ることをお勧めします。エラーを共有したり、解決した方法を教えてください。 – Andrew

関連する問題