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只是在末尾添加TARIH字符串的版本SAYI。我使用它是因为我需要不同的列名来进行双数据透视。我想构建一个执行以下操作的双枢轴:

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从所有选择中删除并且只想执行第一个枢轴,我的代码就可以工作。但是,当我将第二个枢轴添加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 回答