0

SQL Server 2005 にデータを集計したいテーブルがあります。ここに例を示します。

JobName       ProductionCounter       StartDate             EndDate               CounterName        Stage
----------------------------------------------------------------------------------------------------------

200           23                      2012-08-30 13:45:00                          Kilograms          Final
200           2                       2012-08-30 13:45:00                          Bars               Final
    [...]
200           46                      2012-08-30 13:45:00   2012-08-30 17:23:00    Kilograms          Final
200           4                       2012-08-30 13:45:00   2012-08-30 17:23:00    Bars               Final
300           20                      2012-08-30 13:45:00                          Kilograms          1st
300           10                      2012-08-30 18:12:00                          Bars               1st
    [...]
300           40                      2012-08-30 18:12:00   2012-08-30 19:17:00    Kilograms          1st
300           20                      2012-08-30 18:12:00   2012-08-30 19:17:00    Bars               1st

これを次のようにフォーマットしたい

JobName      TotalKilos       TotalBars       StartDate             EndDate               Stage
-----------------------------------------------------------------------------------------------
200          69               6               2012-08-30 13:45:00   2012-08-30 17:23:00   Final
300          60               30              2012-08-30 18:12:00   2012-08-30 19:17:00   1st

これは、私がSQLについて何も知らないことに気づきました。私は最初に次のことを試しました

SELECT JobName, SUM(ProductionCounter)
FROM vwOeeInterval
WHERE (CounterName = 'Kilos')
GROUP BY JobName

SELECT JobName, SUM(ProductionCounter)
FROM vwOeeInterval
WHERE (CounterName = 'Bars')
GROUP BY JobName

私の質問は次のとおりです。

  1. これらを 1 つのクエリに結合するにはどうすればよいですか?

  2. StartDateやなどの列を照会するにはどうすればよいStageですか? 特にEndDate仕事が完了するまで記入されないところは?

どんなポインタでも大歓迎です。

4

5 に答える 5

1

どうぞ:

SELECT 
JobName, 
SUM(CASE CounterName WHEN 'Kilos' THEN ProductionCounter ELSE 0 END) AS SumKilos,
SUM(CASE CounterName WHEN 'Bars' THEN ProductionCounter ELSE 0 END) AS SumBars,
MIN(StartDate), 
MAX(COALESCE(EndDate, 'undefined date')), 
MAX(Stage)
FROM vwOeeInterval
WHERE CounterName IN ('Kilos', 'Bars')
GROUP BY JobName;

MAX(COALESCE(EndDate, 'undefined date'))データ型が衝突する可能性があるため、これが SQL Server で機能するかどうかはわかりません。NULL 値を置き換えたい場合は、COALESCE() が必要です。うまくいかない場合は、MAX(EndDate) を実行するだけで問題ありません。

于 2012-08-31T13:59:50.503 に答える
0

これを試してみてください。おそらくそれが必要です:

   SELECT JobName, SUM(TotalKilos),  SUM(ProductionCounter), MAX(StartDate) , MAX(EndDate), MAX(Stage)
    GROUP BY JobName , CounterName, StartDate, EndDate
    --Optional:
    WHERE EndDate IS NOT NULL

注: ステージはアルファベット順でのみ機能します。開始文字が「F」よりも大きい場合、機能しない場合があります。

于 2012-08-31T13:53:58.537 に答える
0

クエリを組み合わせるには:

SELECT JobName,
       SUM(CASE WHEN CounterName = 'Kilos' THEN ProductionCounter ELSE 0 END) AS TotalKilos,
       SUM(CASE WHEN CounterName = 'Bars' THEN ProductionCounter ELSE 0 END) AS TotalBars
    FROM vwOeeInterval
    GROUP BY JobName;

次に、残りをまとめると、おそらく次のようになります。

SELECT JobName,
       SUM(CASE WHEN CounterName = 'Kilos' THEN ProductionCounter ELSE 0 END) AS TotalKilos,
       SUM(CASE WHEN CounterName = 'Bars' THEN ProductionCounter ELSE 0 END) AS TotalBars,
       MIN(StartDate) AS StartDate,
       MAX(EndDate) AS EndDate,
       MAX(Stage) AS Stage
    FROM vwOeeInterval
    GROUP BY JobName;
于 2012-08-31T13:55:05.860 に答える
0

それらを組み合わせることができます

SELECT 
    JobName, CounterName, SUM(ProductionCounter),
    MIN(StartDate), MAX(EndDate), MAX(Stage)
FROM vwOeeInterval  
GROUP BY JobName , CounterName

そしてそれらをフィルタリングします

HAVING MAX(EndDate) > SomeDate OR MAX(EndDate) is Null
于 2012-08-31T13:50:30.997 に答える
0
select jobname, max(bars) as "TotalBars", max(kg) as "Total Kilos", sd as "Start date", ed as "End date" from(
SELECT JobName, if(countername="bars",SUM(ProductionCounter),null) as "bars" , if(countername="kilograms",SUM(ProductionCounter),null) as "kg" , min(startdate) as sd, max(enddate) as ed
FROM vwOeeInterval
GROUP BY JobName , CounterName) t
group by jobname
于 2012-08-31T14:13:29.317 に答える