2012-05-07 31 views
3

基本上,我創建了一個數據透視查詢,其中它將顯示每個員工每個成本碼的total_work_hours。刪除顯示在主鍵中的重複行

這是我的期望的輸出:

employeeno 8322.170 10184.2648 8321.169 10184.2649 <- costcodes 
-------------------------------------------------------------------------- 
080418   10.00   1.50  NULL   NULL 
080441   6.50   NULL  1.00   3.00 

但是這是我的查詢結果:

employeeno 8322.170 10184.2648 8321.169 10184.2649 <- costcodes 
-------------------------------------------------------------------------- 
080418   10.00   NULL  NULL   NULL 
080418   NULL   1.50  NULL   NULL 
080441   NULL   NULL  1.00   NULL 
080441   6.50   NULL  NULL   NULL 
080441   NULL   NULL  NULL   3.00 

這是我的內查詢的結果:

 employeeno costcoding hour_per_costcode   
     -------------------------------------------------- 
     PH080418 8322.170  10.00 
     PH080418 10184.2648  1.50 
     PH080441 8321.169  1.00 
     PH080441 8322.170  6.50 
     PH080441 10184.2649  3.00 

這是我的查詢:

WITH PivotData AS 
    (SELECT wa.id,wa.sitecode, wa.companycode, wa.startdate, wa.enddate, 
      wa.description, wa.ratetypeid, wa_details.employeeno, 
      CAST(wa_details.costcode AS NVARCHAR(MAX)) + '.' + 
      CAST(wa_details.subcostcode AS NVARCHAR(MAX)) costcoding , 
      wa_details.subcostcode, wa_details.hrswork [hour_per_costcode], 
      view_ttl_hours.ttl_work_hrs 
     FROM workallocation wa 
     INNER JOIN workallocation_details wa_details 
     ON wa.id = wa_details.workallocationid 
     INNER JOIN 
      (SELECT SUM(ttl_work_hrs) ttl_work_hrs, employee_id 
       FROM vwu_SUM_TIMESHEET_DAILY 
       WHERE TKSDATE BETWEEN '02-09-2012' AND '02-09-2012' 
       GROUP BY employee_id 
      ) view_ttl_hours 
     ON wa_details.employeeno=view_ttl_hours.employee_id WHERE wa.id=99 
    ) 
SELECT employeeno, [8322.170], [10184.2648], [8321.169], [10184.2649] 
    FROM PivotData 
PIVOT (MAX([hour_per_costcode])   
     FOR costcoding   
     IN ([8322.170], [10184.2648], [8321.169], [10184.2649]) 
     ) AS PivotResult 
ORDER BY employeeno; 

我的問題是我將如何能夠統一我的多行的價值,使我的願望輸出將實現?我也嘗試跨標籤查詢,但結果也是一樣的。

我需要一些關於如何解決這個問題的指導;你能幫我嗎?

+0

如果你改變你的選擇,在過去查詢'SELECT *'是應該是很明顯的是什麼原因造成問題。我可以給出的另一個建議是消除PivotData中不直接由數據透視表使用的所有內容。 – cadrell0

+0

@ cadrell0 - 感謝您的回覆。我已經注意到很久以前的複製,但我的詳細信息表包含employeeno,costcode,subcostcode和hrswork。所有這些都是唯一鍵。 –

+0

根據@ cadrell0的評論。如何在'with'子句中添加另一個查詢(如'PivotData2 as(select Peenot,[8322.170],[10184.2648] ... from PivotData)'),然後將最後一個查詢改爲'SELECT * ... FROM PivotData2' 。 – fankt

回答

4

從CTE中刪除不需要的列。像這樣的東西應該適合你。

WITH PivotData AS 
    (SELECT wa_details.employeeno, 
      CAST(wa_details.costcode AS NVARCHAR(MAX)) + '.' + 
      CAST(wa_details.subcostcode AS NVARCHAR(MAX)) costcoding , 
      wa_details.subcostcode, wa_details.hrswork [hour_per_costcode] 
     FROM workallocation wa 
     INNER JOIN workallocation_details wa_details 
     ON wa.id = wa_details.workallocationid 
     INNER JOIN 
      (SELECT SUM(ttl_work_hrs) ttl_work_hrs, employee_id 
       FROM vwu_SUM_TIMESHEET_DAILY 
       WHERE TKSDATE BETWEEN '02-09-2012' AND '02-09-2012' 
       GROUP BY employee_id 
      ) view_ttl_hours 
     ON wa_details.employeeno=view_ttl_hours.employee_id WHERE wa.id=99 
    ) 
SELECT employeeno, [8322.170], [10184.2648], [8321.169], [10184.2649] 
    FROM PivotData 
PIVOT (MAX([hour_per_costcode])   
     FOR costcoding   
     IN ([8322.170], [10184.2648], [8321.169], [10184.2649]) 
     ) AS PivotResult 
ORDER BY employeeno; 

上面有你的數據查詢:

WITH PivotData AS 
    (select 'PH080418' as employeeno, 8322.170 as costcoding, 10.00 as hour_per_costcode union all 
    select 'PH080418', 10184.2648, 1.50 union all 
    select 'PH080441', 8321.169, 1.00 union all 
    select 'PH080441', 8322.170, 6.50 union all 
    select 'PH080441', 10184.2649, 3.00 
    ) 
SELECT employeeno, [8322.170], [10184.2648], [8321.169], [10184.2649] 
    FROM PivotData 
PIVOT (MAX([hour_per_costcode])   
     FOR costcoding   
     IN ([8322.170], [10184.2648], [8321.169], [10184.2649]) 
     ) AS PivotResult 
ORDER BY employeeno; 

結果:

employeeno 8322.170 10184.2648 8321.169 10184.2649 
---------- ---------- ------------ ---------- ----------- 
PH080418 10.00  1.50   NULL  NULL 
PH080441 6.50  NULL   1.00  3.00 
+0

對於遲到的回覆感到抱歉。我認爲沒有人瞭解我的問題。我希望我的行是唯一的。請閱讀我的描述。謝謝! –

+0

@ user1378857您是否嘗試過我提供給您的查詢?輸出是什麼? –

+0

是的,我試過你給我的查詢。結果與我的查詢相同。行不是唯一的。 –