2012-02-22 15 views
6

Tôi có bảng với giá trị như sau -Sql server bảng pivot kết quả không tập trung thiết lập

EMP_CODE | LEAVENAME | APP_TYPE | LEAVE_DATE | ACT_DAYS 
-------------------------------------------------------- 
ST006 | CL  | P  | 2012-01-03 | 1.0 
ST006 | CL  | P  | 2012-01-18 | 1.0 
ST006 | SL  | P  | 2012-01-27 | 1.0 
ST002 | CL  | P  | 2012-01-04 | 1.0 
ST002 | CL  | P  | 2012-01-12 | 1.0 
ST002 | SL  | P  | 2012-01-27 | 1.0 
OCO038 | CL  | P  | 2012-01-27 | 1.0 
HO188 | CL  | P  | 2012-01-09 | 1.0 
HO188 | CL  | P  | 2012-01-30 | 1.0 
HO085 | CL  | P  | 2012-01-19 | 1.0 
HO085 | SL  | P  | 2012-01-23 | 1.0 

Tôi đã viết truy vấn này để tổng hợp tất cả lại loại như cột cho từng nhân viên. Mỗi nhân viên chỉ được có một hàng.

SELECT EMP_CODE,[CL],[LWP],[PL],[SL] FROM LEAVE_DETAIL L 
PIVOT (SUM(ACT_DAYS) FOR LEAVENAME IN ([CL],[LWP],[PL],[SL])) 
AS PVT ORDER BY EMP_CODE; 

Nhưng truy vấn này không mang lại cho tôi kết quả mong đợi. Có nhiều hơn một hàng cho mỗi nhân viên mà không phải là những gì tôi muốn.

Bảng dưới đây hiển thị các kết quả mong muốn -

EMP_CODE | CL | SL | 
---------|------|-----| 
ST006 | 2.0 | 1.0 | 
ST002 | 2.0 | 1.0 | 
OCO038 | 1.0 | 0.0 | 
HO188 | 2.0 | 0.0 | 
HO085 | 1.0 | 1.0 | 

Xin vui lòng giúp.

+0

Bạn có thể hiển thị đầu ra bạn đang thực sự nhận được không? –

Trả lời

6

Bạn thậm chí không cần nhóm theo truy vấn. Bởi vì những gì một trục làm là nó "nhóm theo" trên các cột khác. Chìa khóa để giải pháp này là lựa chọn bên trong. Tôi nghĩ rằng đây không phải là một thần tiên để làm một khoản tiền với nhóm và sau đó áp dụng một khoản tiền và một nhóm một lần nữa.

SELECT 
    EMP_CODE, 
    [CL], 
    [LWP], 
    [PL], 
    [SL] 
FROM 
(
    SELECT 
     EMP_CODE, 
     LEAVENAME, 
     ACT_DAYS 
    FROM 
     @tmp_emp 
) L 
PIVOT 
(
    SUM(ACT_DAYS) 
    FOR LEAVENAME IN ([CL],[LWP],[PL],[SL]) 
) 
AS PVT 
ORDER BY EMP_CODE 

Điều này sẽ giúp bạn có kết quả tương tự.

+1

Cảm ơn bạn đã trả lời câu hỏi và xóa tất cả các nghi ngờ. –

+0

Rất vui được giúp đỡ. Tôi chỉ phải trả lời vì làm một cái gì đó hai lần không bao giờ là thần cho buổi biểu diễn. – Arion

+1

Cảm ơn, điều này giải quyết được vấn đề của tôi. Tôi cảm thấy vấn đề này xảy ra khi chúng tôi có nhiều cột đo lường tồn tại trong truy vấn. –

2

bạn có thể thử như sau. Bạn có thể kiểm tra lại bảng của bạn khi tôi kiểm tra bảng tạm thời giống như bảng của bạn.

create table #tmp_emp (EMP_CODE varchar(10),LEAVENAME char(2), APP_TYPE char(1),LEAVE_DATE datetime,ACT_DAYS decimal(2,1)) 

insert into #tmp_emp values ('ST006','CL','P ','2012-01-03','1.0'); 
insert into #tmp_emp values ('ST006','CL','P ','2012-01-18','1.0'); 
insert into #tmp_emp values ('ST006','SL','P ','2012-01-27','1.0'); 
insert into #tmp_emp values ('ST002','CL','P ','2012-01-04','1.0'); 
insert into #tmp_emp values ('ST002','CL','P ','2012-01-12','1.0'); 
insert into #tmp_emp values ('ST002','SL','P ','2012-01-27','1.0'); 
insert into #tmp_emp values ('OCO038','CL','P ','2012-01-27','1.0'); 
insert into #tmp_emp values ('HO188','CL','P ','2012-01-09','1.0'); 
insert into #tmp_emp values ('HO188','CL','P ','2012-01-30','1.0'); 
insert into #tmp_emp values ('HO085','CL','P ','2012-01-19','1.0'); 
insert into #tmp_emp values ('HO085','SL','P ','2012-01-23','1.0'); 

SELECT EMP_CODE,[CL],[LWP],[PL],[SL] 
FROM 
(
    select EMP_CODE, LEAVENAME, sum(ACT_DAYS) ACT_DAYS 
    from #tmp_emp 
    group by EMP_CODE, LEAVENAME 
) L 
PIVOT (SUM(ACT_DAYS) FOR LEAVENAME IN ([CL],[LWP],[PL],[SL])) 
AS PVT ORDER BY EMP_CODE; 
+0

Người đàn ông tuyệt vời. Tôi chỉ bỏ lỡ điểm mà nó phải được nhóm lại trước khi áp dụng trục. –