0

次のようなテーブルがあります。それを呼びましょうTBL1

                    SINIF                                        NAME_  CURCODE    TARIH       TARIHS     TAKSIT
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD     2015    2015 SAYI   28770,13
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD     2015    2015 SAYI   28770,13
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD     2015    2015 SAYI   28770,13
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD     2015    2015 SAYI   28770,13
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD     2015    2015 SAYI   28770,13
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD     2015    2015 SAYI   28770,13
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD     2015    2015 SAYI   28770,13
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD     2015    2015 SAYI   28770,13
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD     2015    2015 SAYI   28770,13
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD     2015    2015 SAYI   28770,13
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD     2015    2015 SAYI   28770,13
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD     2015    2015 SAYI   28770,13
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD     2016    2016 SAYI   28770,13
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD     2016    2016 SAYI   28770,13
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD     2016    2016 SAYI   28732,89
     02 - YATIRIM KREDİSİ         TEB KREDİ - 100.000 EUR (ARAÇ KREDİ)      EUR     2015    2015 SAYI    2024,67
     02 - YATIRIM KREDİSİ         TEB KREDİ - 100.000 EUR (ARAÇ KREDİ)      EUR     2015    2015 SAYI    2024,67
     02 - YATIRIM KREDİSİ         TEB KREDİ - 100.000 EUR (ARAÇ KREDİ)      EUR     2015    2015 SAYI    2024,67

最後に文字列が追加されたTARIHS単なるバージョンであることに注意してください。ダブルピボットには異なる列名が必要なため、これを使用します。次のことを行うダブル ピボットを構築したいと考えています。TARIHSAYI

SUM(TAKSIT) vs TARIH (2015, 2016, 2017)
COUNT(TARIHS) vs TARIHS (2015 SAYI, 2016 SAYI, 2017 SAYI)

したがって、次のようなテーブルを取得したいと思います。

                    SINIF                                        NAME_  CURCODE        2015      2016    2017    2015 SAYI    2016 SAYI    2017 SAYI
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD    345243.6   86310.9    NULL           12            3         NULL
     02 - YATIRIM KREDİSİ         TEB KREDİ - 100.000 EUR (ARAÇ KREDİ)      EUR     6074.01      NULL    NULL            3         NULL         NULL

ただし、ダブル ピボットを作成すると、次のようになります。

                    SINIF                                        NAME_  CURCODE        2015      2016    2017    2015 SAYI    2016 SAYI    2017 SAYI
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD    345243.6      NULL    NULL            1            0            0
01 - TİCARİ (GENEL) KREDİ   VAKIFBANK KREDİ - 1.500.000 USD (TÜKETİCİ)      USD        NULL   86310.9    NULL            0            1            0
     02 - YATIRIM KREDİSİ         TEB KREDİ - 100.000 EUR (ARAÇ KREDİ)      EUR     6074.01      NULL    NULL            1            0            0

誰かが私のコードを手伝ってくれますか? 元のコードは少し長いのでここには貼り付けませんが、概要を理解できるように要約しました。

TARIHSまた、すべての選択から削除して最初のピボットを実行したいだけの場合、私のコードが機能することをお知らせしたいと思います。ただし、2 番目のピボットをTARIHSミックスに追加すると、目的とは異なるテーブルが表示されます。

ありがとう!

4

2 に答える 2

1

SQL フィドル

MS SQL Server 2008 スキーマのセットアップ:

CREATE TABLE Test_Table(SINIF NVARCHAR(1000), NAME NVARCHAR(200)
, CURCODE NVARCHAR(1000) , TARIH INT, TARIHS VARCHAR(100), TAKSIT DECIMAL(10,2))

INSERT INTO Test_Table VALUES
(N'01 - TİCARİ (GENEL) KREDİ', N'VAKIFBANK KREDİ - 1500000 USD (TÜKETİCİ)','USD', 2015,'2015 SAYI',   28770.13),
(N'01 - TİCARİ (GENEL) KREDİ', N'VAKIFBANK KREDİ - 1500000 USD (TÜKETİCİ)','USD', 2015,'2015 SAYI',   28770.13),
(N'01 - TİCARİ (GENEL) KREDİ', N'VAKIFBANK KREDİ - 1500000 USD (TÜKETİCİ)','USD', 2015,'2015 SAYI',   28770.13),
(N'01 - TİCARİ (GENEL) KREDİ', N'VAKIFBANK KREDİ - 1500000 USD (TÜKETİCİ)','USD', 2015,'2015 SAYI',   28770.13),
(N'01 - TİCARİ (GENEL) KREDİ', N'VAKIFBANK KREDİ - 1500000 USD (TÜKETİCİ)','USD', 2015,'2015 SAYI',   28770.13),
(N'01 - TİCARİ (GENEL) KREDİ', N'VAKIFBANK KREDİ - 1500000 USD (TÜKETİCİ)','USD', 2015,'2015 SAYI',   28770.13),
(N'01 - TİCARİ (GENEL) KREDİ', N'VAKIFBANK KREDİ - 1500000 USD (TÜKETİCİ)','USD', 2015,'2015 SAYI',   28770.13),
(N'01 - TİCARİ (GENEL) KREDİ', N'VAKIFBANK KREDİ - 1500000 USD (TÜKETİCİ)','USD', 2015,'2015 SAYI',   28770.13),
(N'01 - TİCARİ (GENEL) KREDİ', N'VAKIFBANK KREDİ - 1500000 USD (TÜKETİCİ)','USD', 2015,'2015 SAYI',   28770.13),
(N'01 - TİCARİ (GENEL) KREDİ', N'VAKIFBANK KREDİ - 1500000 USD (TÜKETİCİ)','USD', 2015,'2015 SAYI',   28770.13),
(N'01 - TİCARİ (GENEL) KREDİ', N'VAKIFBANK KREDİ - 1500000 USD (TÜKETİCİ)','USD', 2015,'2015 SAYI',   28770.13),
(N'01 - TİCARİ (GENEL) KREDİ', N'VAKIFBANK KREDİ - 1500000 USD (TÜKETİCİ)','USD', 2015,'2015 SAYI',   28770.13),
(N'01 - TİCARİ (GENEL) KREDİ', N'VAKIFBANK KREDİ - 1500000 USD (TÜKETİCİ)','USD', 2016,'2016 SAYI',   28770.13),
(N'01 - TİCARİ (GENEL) KREDİ', N'VAKIFBANK KREDİ - 1500000 USD (TÜKETİCİ)','USD', 2016,'2016 SAYI',   28770.13),
(N'01 - TİCARİ (GENEL) KREDİ', N'VAKIFBANK KREDİ - 1500000 USD (TÜKETİCİ)','USD', 2016,'2016 SAYI',   28732.89),
  (N'02 - YATIRIM KREDİSİ',         N'TEB KREDİ - 100000 EUR (ARAÇ KREDİ)','EUR', 2015,'2015 SAYI',    2024.67),
  (N'02 - YATIRIM KREDİSİ',         N'TEB KREDİ - 100000 EUR (ARAÇ KREDİ)','EUR', 2015,'2015 SAYI',    2024.67),
  (N'02 - YATIRIM KREDİSİ',         N'TEB KREDİ - 100000 EUR (ARAÇ KREDİ)','EUR', 2015,'2015 SAYI',    2024.67)

クエリ 1 :

SELECT * FROM 
(SELECT SINIF ,NAME ,CURCODE , CAST(TARIH AS NVARCHAR(10)) AS Years, TAKSIT  
 FROM Test_Table 
UNION ALL
SELECT SINIF , NAME , CURCODE, TARIHS , COUNT(*) counts FROM Test_Table
GROUP BY SINIF , NAME , CURCODE , TARIHS ) t 
  PIVOT (SUM(TAKSIT)
         FOR Years
         IN ([2015],[2016],[2017],[2015 SAYI],[2016 SAYI],[2017 SAYI])) P

結果

|                     SINIF |                                     NAME | CURCODE |      2015 |     2016 |   2017 | 2015 SAYI | 2016 SAYI | 2017 SAYI |
|---------------------------|------------------------------------------|---------|-----------|----------|--------|-----------|-----------|-----------|
| 01 - TİCARİ (GENEL) KREDİ | VAKIFBANK KREDİ - 1500000 USD (TÜKETİCİ) |     USD | 345241.56 | 86273.15 | (null) |        12 |         3 |    (null) |
|      02 - YATIRIM KREDİSİ |      TEB KREDİ - 100000 EUR (ARAÇ KREDİ) |     EUR |   6074.01 |   (null) | (null) |         3 |    (null) |    (null) |
于 2014-12-27T10:19:42.353 に答える
0

SINIF, NAME_ , CURCODE, TARIH, TARIHS, TAKSIT問題は、ピボット ソース クエリですべての列を選択している可能性があります。このようにクエリを変更してみてください。

ソース ピボット クエリで

SELECT a.SINIF,a.NAME_,a.CURCODE,
       [2015],[2016],[2017],
       [2015 SAYI],[2016 SAYI],[2017 SAYI]
FROM  (SELECT *
       FROM   (SELECT SINIF,NAME_,CURCODE,TAKSIT,tarih
               FROM   Tablename) a
              PIVOT (Sum(TAKSIT)
                    FOR tarih IN([2015],[2016],[2017]))piv) a
      JOIN(SELECT *
           FROM   (SELECT SINIF,NAME_,CURCODE,TARIHS
                   FROM   Tablename) a
                  PIVOT (Count(TARIHS)
                        FOR TARIHS IN([2015 SAYI],[2016 SAYI],[2017 SAYI]))piv) b
        ON a.SINIF = b.SINIF
           AND a.NAME_ = b.NAME_
           AND a.CURCODE = b.CURCODE 

SQLFIDDLE デモ

于 2014-12-27T10:09:05.200 に答える