3

同じプロジェクト番号のピボット テーブル プロジェクト データの日付で並べ替える必要があります

プロジェクトは次のようになります。

"Project nr"   "Task"                "Task deadline"  "Task Type Production"
123             pack                  1 april 2013    Pack
123             Leave production      3 april 2013    Leave Production
123             Flight date           9 april 2013    Flight Date

「タスク タイプ プロダクション」は、フィールドの内容が常に一貫していることを確認するために作成されます。ピボット テーブルには 1 つの列しか作成できません。これらの情報を 3 列に表示する方法はありますか? 次のようになります。

Project nr ;  Pack   ;  leave production ; flightdate   


SELECT  [TaskDeadline] AS Packed
FROM         MSP_EpmTask_UserView where  [Task Type Production] = 'Packed'
SELECT  [TaskDeadline] AS LeaveProduction
FROM         MSP_EpmTask_UserView where  [Task Type Production] =  'Leave Production' 
SELECT  [TaskDeadline] AS FlightDate
FROM         MSP_EpmTask_UserView where  [Task Type Production] =  'Flight Date'

ありがとうアン

4

2 に答える 2

4

CASEこれは、集計関数と式を使用して簡単に実行できます。

select  [Project nr],
    MAX(case when [Task Type Production] = 'Pack' then [Task deadline] end) as Pack,
    MAX(case when [Task Type Production] = 'Leave Production' then [Task deadline] end) as [Leave Production],
    MAX(case when [Task Type Production] = 'Flight Date' then [Task deadline] end) as [Flight Date]
from MSP_EpmTask_UserView 
group by    [Project nr]

デモで SQL Fiddle を参照してください

PIVOTSQL Server で関数を使用する場合、クエリは次のようになります。

select *
from
(
  select [Project nr],[Task deadline], [Task Type Production]
  from MSP_EpmTask_UserView 
) src
pivot
(
  max([Task deadline])
  for [Task Type Production] in ([Pack], [Leave Production],
                                 [Flight Date])
) piv

SQL Fiddle with Demoを参照してください。

最後に、テーブルへの複数の結合を使用してこれを行うことができます。

select t1.[Project nr],
  t1.[Task deadline] pack,
  t2.[Task deadline] [Leave Production],
  t3.[Task deadline] [Flight Date]
from MSP_EpmTask_UserView t1
left join MSP_EpmTask_UserView t2
  on t1.[Project nr] = t2.[Project nr]
  and t2.[Task Type Production] = 'Leave Production'
left join MSP_EpmTask_UserView  t3
  on t1.[Project nr] = t3.[Project nr]
  and t3.[Task Type Production] = 'Flight Date'
where t1.[Task Type Production] = 'Pack'

デモで SQL Fiddle を参照してください

すべてのクエリの結果は次のとおりです。

| PROJECT NR |       PACK | LEAVE PRODUCTION | FLIGHT DATE |
------------------------------------------------------------
|        123 | 2013-04-01 |       2013-04-03 |  2013-04-09 |
于 2013-02-05T16:38:41.243 に答える
1

相関サブクエリの従来の方法を使用して、クロスタブまたはピボットの作成を試みることができます。

select [Project nr]
    , (select [Task deadline] from MSP_EpmTask_UserView where [Project nr] = t.[Project nr] and [Task Type Production] = 'Pack') as Pack
    , (select [Task deadline] from MSP_EpmTask_UserView where [Project nr] = t.[Project nr] and [Task Type Production] = 'Leave Production') as [Leave Production]
    , (select [Task deadline] from MSP_EpmTask_UserView where [Project nr] = t.[Project nr] and [Task Type Production] = 'Flight Date') as [Flight Date]
from MSP_EpmTask_UserView t
group by [Project nr]
order by [Project nr]

/*
Project nr  Pack       Leave Production Flight Date
----------- ---------- ---------------- -----------
123         2013-04-01 2013-04-03       2013-04-09
*/

これは、優れたデータ型を持つSQL Server 2008でdate実行しましたが、stingsまたはdatetimeを使用して実行できます。これは、特定のプロジェクト番号の各日付が1つだけであることも前提としています。

また、可能であれば、DBオブジェクト名にスペースやその他の特殊文字を入れないようにしてください。これにより、角かっこで区切る必要があります。

于 2013-02-05T16:32:40.040 に答える