1

私は小さな製造会社のCTOであり、明らかに非常に実践的なことを行っており、経験の浅い人々に時間を提供してくれる専門家に感謝しています。

SQL Serverのクエリを作成して、製造プロセスの各マシンの時間を集計しようとしています。

私が得る結果は次のようになります。

InvoiceID Min DateIn      MachineName  MachineID
17993     12  2012-09-28  Beam Saw     1
17993     26  2012-09-28  Beam Saw     1
17993     17  2012-10-02  Edge Banding 3
17993     21  2012-10-02  Skipper      4
17993     23  2012-10-03  Shipping     5

次の請求書など。

私のコード:

SELECT i.InvoiceID
    ,SUM(DATEPART(Minute,(wf.DateTimeOut - wf.DateTimeIn))) AS [Min]
    ,CAST(wf.DateTimeIn AS DATE) AS [DateIn]
    ,m.MachineName
    ,wf.MachineID
FROM Workflow wf 
    JOIN
        InvoicesPerJobPeriod ipjp
        ON
        ipjp.Workflowid = wf.ID
    JOIN Machines m
        ON 
        m.MachineID = wf.MachineID
    JOIN
        Invoices i
        ON ipjp.InvoiceID = i.InvoiceID
WHERE (i.InActive = '0') 
GROUP BY i.InvoiceID, m.MachineName, wf.MachineID, wf.DateTimeIn
ORDER BY i.InvoiceID, wf.MachineID

グループ化でビームソーの複数のレコードが表示される理由がわかりません。理想的には、マシンごと、請求書ごとに1つのレコードが必要です。Datetimeinは通常同じ日になりますが、製造ステップが数日にわたる場合に備えて、表示する必要があります。その場合、1台のマシンに複数のレコードを用意するのが妥当です。

手伝ってくれてどうもありがとう。大変感謝しております。

4

1 に答える 1

1

wf.DateTimeIn2つの異なるBeam​​Sawレコードで(日付または時間コンポーネントのいずれかで)まったく異なる場合、ステートメントGROUP BYでの非集計の使用法がSELECT日付部分のみを参照している場合でも、句に別々の行が生成されます。

の日付部分DateTimeInのみでグループ化する場合は、次のように記述します。

GROUP BY i.InvoiceID, m.MachineName, wf.MachineID, CAST(wf.DateTimeIn AS DATE)

これにより、他の方法で一致し、同じ日に入力された任意の数のビームソーレコードが1つの行にグループ化されます。

ただし、これにより集計ステートメントのセマンティクスが変更される可能性があるため、この変更を行った後、クエリが希望どおりに機能することを確認する必要があります。

于 2012-10-10T17:21:43.930 に答える