0

だから私はテーブルを持っています、そのベースには次の構造があります:

  • 作業命令
  • サブオーダー
  • 状態
  • StatusDate
  • タイプ
  • カテゴリー

(他にもありますが、質問のために無視しています)

タイプ/カテゴリの特定のサブセットをフィルタリングしていますが、その方法を知っています。しかし、私が出てくる必要があるのは次のとおりです

WorkOrder | SubOrder | Type - Category | Min(StatusDate) where Status = Open | Min(StatusDate) where Status = Complete | Calculated Date Difference between the two

一度に1つずつ入手できますが、問題ありません。とりあえず、Excelでそれを使ってサルをしているところです。ただし、生成を開始する必要があるレポートのSQLステートメントにこれを取り込む必要があります。ステータスが完了のStatusDateがある場合とない場合があり(SubOrderが他の場所で完了としてマークされていない場合)、データセットはそれも反映する必要があります。各サブオーダーが開かれて完了した回数が複数ある可能性があるため、最初のサブオーダーが必要です(したがって、Min())

このタスクにどのように取り組むべきかについてのアイデアはありますか?(いいえ、データ構造の変更は許可されていません、OTSソフトウェア、そして私たちはそれを変更するためにお金を払っていません)

4

1 に答える 1

0

テーブルをそれ自体に結合する必要がある理由がわかりません。あなたが欲しいだけのように聞こえます

SELECT WorkOrder,
       SubOrder,
       Type,
       Category,
       min( case when Status = 'Open' 
                 then StatusDate 
                 else null 
             end) min_open_status_date,
       min( case when Status = 'Complete' 
                 then StatusDate 
                 else null 
             end) min_complete_status_date,
       min( case when Status = 'Complete' 
                 then StatusDate 
                 else null 
              end) - 
         min( case when Status = 'Open' 
                   then StatusDate 
                   else null 
                end)
  FROM table_name
 WHERE <<whatever conditions>>
 GROUP BY WorkOrder,
          SubOrder,
          Type,
          Category

それがあなたが探しているものではない場合は、質問を編集してDDLを投稿し、テーブルを作成し、DMLをいくつかの行に入力し、そのサンプルデータに必要な出力を正確に教えてください。または、 sqlfiddle.comでフィドルを作成します。そうでなければ、私たちはあなたが欲しいものを推測する必要があります。たとえば、2つの日付の差を計算したいが、2つの日付の1つが存在しない可能性があると言います。終了日がない場合、計算に基準日を使用しますか?このクエリはNULL、計算された差を返します。これは、希望するものである場合とそうでない場合があります。

于 2013-01-31T20:35:09.090 に答える