只要有3个表,分别为 DataSort(数据类别表),Data (数据表),Header(一辆车每天的记录投档)
DataSort表有两个列,Id 和 Name
Data表有三个列,Id,DataSortId,Value,HeaderId
Header表
现在有这样的情况,数据类别有2个,分别为平均车速和运行时间。
因此假设有以下数据
DataSort表
Id | Name |
---|---|
1 | 平均车速 |
2 | 运行时间 |
Data表
Id | DataSortId | Value | HeaderId |
---|---|---|---|
1 | 1 | 130 | 11 |
2 | 2 | 1000 | 12 |
Header表
Id | Cat | Date |
---|---|---|
11 | A | 2011-11-11 |
22 | B | 2011-11-11 |
三个表互相关联
我是想计算得到,每辆车每天行驶的里程(里程=平均车速×运行时间)
这样的SQL要怎么写呢?对问题有什么不明白的地方请留言?
SELECT a.Cat,a.date,a.speed*b.time AS Mileage FROM (
SELECT d.DataSortId,h.Cat,h.Date,sum(d.Value) AS speed
FROM Data d
LEFT JOIN Header h
ON d.HeaderId=h.Id
WHERE DataSortId=1
GROUP BY d.DataSortId,h.Cat,h.Date
) a
INNER JOIN
(SELECT d.DataSortId,h.Cat,h.Date,sum(d.Value) AS time
FROM Data d
LEFT JOIN Header h
ON d.HeaderId=h.Id
WHERE DataSortId=2
GROUP BY d.DataSortId,h.Cat,h.Date
) b
ON a.Cat=b.Cat AND a.Date=b.Date
虽然看不懂,但经过稍稍修改之后,问题还是解决的,呵呵
突然又看明白了,这个回答给了我好多启发 哈哈