0

私はこのSQLのことは初めてです。次のようなテーブルがあります。

Table dataTable

caseID  Title   staffID  staffName  Date        Budget  Actual
------  ------  -------  ---------  ----------  ------  ------
413     Week 1  1213     Jackson    1990-10-07  1000    1000
413     Week 1  1214     Jeckson    1990-10-07  2000    1500
413     Week 2  1215     Jickson    1990-10-07  1000    1500 
414     Week 2  1216     Jockson    1990-10-08  1500    1000 
414     Week 2  1217     Juckson    1990-10-08  2000    1000

次のような結果が必要です。

テーブル内のすべての詳細を表示するだけでなく、合計予算と合計実績グループもケース ID 別に表示します

caseID  staffID  staffName  Date        Budget  Actual  totalBudget  totalActual
------  -------  ---------  ----------  ------  ------  -----------  -----------
413     1213     Jackson    1990-10-07  1000    1000
413     1214     Jeckson    1990-10-07  2000    1500
413     1215     Jickson    1990-10-07  1000    1500    4,000        2,500
414     1216     Jockson    1990-10-08  1500    1000 
414     1217     Juckson    1990-10-08  2000    1000    3,500        1,000

誰でもコードを手伝ってもらえますか? 私はそれをすることができません。

ps: これらすべての情報を表に表示する方法がわかりません。

4

2 に答える 2

3

これを試して:

select
  t1.caseID, t1.staffID, t1.staffName, t1.Date, t1.Budget, t1.Actual, 
  format(t2.totalBudget, 0) TotalBudget, format(t2.totalActual, 0) TotalActual
from t t1 left join (
  select caseID, max(staffId) staffId, sum(Budget) totalBudget,
  sum(Actual) totalActual from t
  group by caseID
) t2 on t1.caseID = t2.caseID and t1.staffId = t2.staffId

結果は次のとおりです。

+--------+---------+-----------+------------+--------+--------+-------------+-------------+
| CASEID | STAFFID | STAFFNAME |    DATE    | BUDGET | ACTUAL | TOTALBUDGET | TOTALACTUAL |
+--------+---------+-----------+------------+--------+--------+-------------+-------------+
|    413 |    1213 | Jackson   | 07-10-1990 |   1000 |   1000 |             |             |
|    413 |    1214 | Jeckson   | 07-10-1990 |   2000 |   1500 |             |             |
|    413 |    1215 | Jickson   | 07-10-1990 |   1000 |   1500 |       4,000 |       4,000 |
|    414 |    1216 | Jockson   | 08-10-1990 |   1500 |   1000 |             |             |
|    414 |    1217 | Juckson   | 08-10-1990 |   2000 |   1000 |       3,500 |       2,000 |
+--------+---------+-----------+------------+--------+--------+-------------+-------------+

何か問題がありましたらお知らせください。

PS: 合計実績が間違っていることに注意してください。質問を更新する必要があります

于 2012-03-18T18:41:21.800 に答える
0

これに役立つSQLのデータベース固有の拡張機能( t-sqlのROLLUPなど)がありますが、実行しているプラ​​ットフォームに関する十分な情報を提供していないため、プラットフォームネストされた (派生) テーブルをサポートします。

あなたの例によると、結果内のその時点で合計行を配置するロジックはないようですので、関連する結果をすべての行に追加しました。

SELECT a.caseID, a.staffID, a.staffName, a.Date, a.Budget, a.Actual, 
  b.totalBudget, b.totalActual
FROM tbl a INNER JOIN (
  SELECT caseID, SUM(Budget) as totalBudget, SUM(Actual) as totalActual
  FROM tbl 
  GROUP BY caseID
) b ON a.caseID = b.caseID 
于 2012-03-18T13:58:37.217 に答える