0

これが私がやりたいことです。職場、詳細、ダウンタイムの3つのテーブルがあります。これまでのところ、Workplaceテーブルからワークプレースの番号(およびDetailsテーブルから名前を追加)、通知が行われた日付、ダウンタイムテーブルからのシフトとダウンタイム分の合計を選択しています...ダウンタイムテーブルにありますダウンタイムコードの列です。すべての通知にはコードと分数があります。私がやりたいのは...コードと同じ数の列があることです...これが私のクエリが今私に示していることです:

|Workplace|Date       |Shift|Downtime|
|1345     |2012-08-28 |1    |100     |
|1346     |2012-08-28 |1    |130     |
|1347     |2012-08-28 |1    |40      |

報告された分とともにダウンタイムテーブルにダウンタイムコードがあります...そしてそれを次のようにしたいと思います:

|Workplace|Date       |Shift|Code 1|Code 3|Code 4|Code 6|
|1345     |2012-08-28 |1    |100   |30    |10    | 5    |
|1346     |2012-08-28 |1    |130   |30    |10    | 5    |
|1347     |2012-08-28 |1    |40    |30    |10    | 5    |

どうすればそのようなことができますか?ありがとうございました!

4

4 に答える 4

2

つまり、ダウンタイムを使用されたコードに分割したいですか?これは、caseステートメントを使用して実行できるはずです。

SELECT Workplace、Date、Shift、SUM(CASE WHEN Code = Code1 then Downtime ELSE 0)as Code1、SUM(CASE WHEN Code = Code2 then Downtime ELSE 0)asCode2など。

于 2012-08-28T18:14:45.890 に答える
1

私の簡単な答えは、カーソルと動的クエリを使用できるということです。

カーソルの例: http ://www.mssqltips.com/sqlservertip/1599/sql-server-cursor-example/

動的クエリの例: http ://www.techrepublic.com/blog/datacenter/generate-dynamic-sql-statements-in-sql-server/306

幸運を。

于 2012-08-28T17:46:04.737 に答える
1

あなたの返事からOK私はあなたがあなたのほとんどのコードを持っていることを提案するでしょう、それでそれは大まかに次のようになるでしょう:

select 
 tablea.workplace, 
 tablea.date, 
 tablea.shift, 
 sum(downtimemins),
 tableb.code1,
 tableb.code3, 
 tableb.code4, 
 tableb.code6 
from tablea 
left join downtime on 
 tablea.workplace=tableb.workplace and 
 tablea.date=tableb.date and 
 tablea.shift=tableb.shift 
group by tablea.workplace, tablea.date, tablea.shift
于 2012-08-28T18:04:38.530 に答える
0

必要なのは、基本的にSQL2005標準で導入されたPIVOT句です。AFAIK Microsoft SQL ServerとOracleは、PIVOT句をサポートしています。postgresqlにはサードパーティのソリューションがありますが、他のRDBMSについてはわかりません。

したがって、使用しているデータベースに応じて、実行できないか、実行できます(PIVOTを使用)。

于 2012-08-28T18:30:29.220 に答える