2012-02-22 62 views
6

我有值表如下 -Sql Server中的數據透視表不分組結果集

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 

我寫了這個查詢來概括全部離開類型,爲每個員工列。每位員工只能有一行。

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; 

但是這個查詢沒有給我預期的輸出。每個員工都有不止一行,這不是我想要的。

下表顯示預期的輸出 -

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 | 

請幫助。

+0

你能顯示你實際得到的輸出嗎? – 2012-02-22 06:30:02

回答

6

你甚至不需要查詢中的group by。因爲一個數據透視表所做的是在其他列上「分組」。這個解決方案的關鍵是內部選擇。我認爲首先和一羣人一起做總和,然後再次申請一筆總額和一個小組,這不是一個無知的行爲。

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 

這會得到相同的結果。

+1

感謝您回答問題並清除所有疑問。 – 2012-02-22 10:37:57

+0

很高興提供幫助。我只是不得不回答,因爲做兩次事情從來都不是表演的上帝。 – Arion 2012-02-22 10:40:56

+1

謝謝,這解決了我的問題。當我們在查詢中存在多個度量列時,我覺得會發生這個問題。 – 2012-09-14 05:37:17

2

你可以嘗試如下。當我測試臨時表時,您可以重新制作您的表格。

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

優秀的男人。我只是錯過了在應用數據透視之前必須進行分組的點。 – 2012-02-22 06:51:05