2012-05-07 18 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のコメントに基づいています。 ( 'PivotData2 as(PivotDataから[employereen、[8322.170]、[10184.2648] ...を選択してください)')のような 'with'節に別のクエリを追加して、最後のクエリを' 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

はい私があなたに私に与えた質問を試みました。結果は私のクエリと同じです。行は一意ではありません。 –

関連する問題