透视嵌套列(按列分组) - SQL Server

时间:2018-06-11 17:35:13

标签: sql sql-server tsql pivot

我试图弄清楚我是否可以根据需要调整这些结果,或者我是否需要在Crystal中编写此报告。

DATA TO CREATE TABLE:

CREATE TABLE 
    #TempData (
                EMP NVARCHAR(35),
                WKDAY NVARCHAR(3),
                ENTRY_DATE DATETIME,
                REG_HOURS INT,
                OT_HOURS INT,
                PTO_HOURS INT);

INSERT INTO #TempData (EMP, WKDAY, ENTRY_DATE, REG_HOURS, OT_HOURS, PTO_HOURS)
VALUES ('Doe, John','Fri','2018-03-16 00:00:00.000','10','2','35'),
('Boop, Betty','Fri','2018-03-16 00:00:00.000','8','3','48'),
('Boop, Betty','Mon','2018-03-19 00:00:00.000','8','8','63'),
('Square, Sponge','Mon','2018-03-19 00:00:00.000','9','7','21'),
('Rabbit, Roger','Tue','2018-03-20 00:00:00.000','5','9','45'),
('Square, Sponge','Tue','2018-03-20 00:00:00.000','9','0','9'),
('Boop, Betty','Wed','2018-03-21 00:00:00.000','0','4','18'),
('Doe, John','Wed','2018-03-21 00:00:00.000','12','4','57'),
('Matrix, Neo','Thu','2018-03-22 00:00:00.000','8','6','24');

所需的结果将如下面的Pivot Nested Columns(按列分组)所示:

WKDAY   DATE                                        Doe, John                               Boop, Betty                             Square, Sponge                                  Rabbit, Roger
                                        REG_HOURS   OT_HOURS    PTO_HOURS       REG_HOURS   OT_HOURS    PTO_HOURS           REG_HOURS   OT_HOURS    PTO_HOURS           REG_HOURS   OT_HOURS    PTO_HOURS
Fri     2018-03-16 00:00:00.000             10      2           35                      8           3           48                  0           0           0                   0           0           0
Mon     2018-03-19 00:00:00.000             0       0           0                       8           8           63                  9           7           21                  0           0           0   
Tue     2018-03-20 00:00:00.000             0       0           0                       0           0           0                   9           0           9                   5           9           45  

它应该采用这种格式,我不想通过日期或任何其他组合合并列名。

这可能吗?

我看到的唯一选择是在Crystal Reports等报告中对其进行编码。

2 个答案:

答案 0 :(得分:0)

在表示层中进行透视。 Crystal Reports,Excel,Access,Tableau等等。

答案 1 :(得分:0)

在SQL Server中,没有列组的概念。

你可以得到这样的结果:

WKDAY   DATE                                        Doe_John_REG_HOURS     Doe_John_OT_HOURS      Doe_John_PTO_HOURS    Boop_Betty_REG_HOURS     Boop_Betty_OT_HOURS      Boop_Betty_PTO_HOURS        etc... 

但是,在您的问题中使用两行列标题的确切格式的唯一方法是在表示层中。