SQL查询 - 跨2个表的数学查询

时间:2014-05-27 04:56:33

标签: sql sql-server math join multiplication

我认为标题有点偏离我的需要,所以如果有人想到更好的标题,请不要犹豫,改变它。

我的问题是:我有一个TIMESHEET表和一个RATES表。

TIMESHEET表如下所示:

|RATE-ID|OT |DAY1|DAY2|DAY3|DAY4|DAY5|DAY6|DAY7|DAY8|DAY9|DAY10|DAY11|DAY12|DAY13|DAY14|
----------------------------------------------------------------------------------------
|   1   |1  | 2  | 3  | 4  | 5  | 6  | 0  | 0  | 7  | 8  |  1  |  2  |  0  |  5  |  6  |
|   5   |1.5| 6  | 5  | 4  | 3  | 2  | 0  | 0  | 1  | 0  |  7  |  6  |  4  |  3  |  2  |

RATES表如下所示:

|ID|  RATE  |
|1 |  50.00 |
|2 |  30.00 |
    ....
|5 |  100.00|

那么我在查询方面的做法(一旦关闭,所以不用担心SQL注入)是这样的:

SELECT sum(DAY1)+sum(DAY2)+sum(DAY3)+sum(DAY4)+sum(DAY5)+sum(DAY6)+sum(DAY7)+sum(DAY8)+sum(DAY9)+sum(DAY10)+sum(DAY11)+sum(DAY12)+sum(DAY13)+sum(DAY14) as TOTALHOURS, OT, RATES.RATE from TIMESHEET INNER JOIN RATES on TIMESHEETS.RATE-ID = RATES.ID

作品太棒了 - 3个单独的栏目告诉我总小时数,加时赛乘数和费率。现在是我正在努力的部分。我似乎无法将TOTALHOURS列与任何东西相乘。我可以做简单的OT * RATE as NEWRATE并将其归结为2列:TOTALHOURS和NEWRATE。

我的问题是,如何将这两个动态命名列相乘以获得结果?

,即第一个是49(第1行的总和)* 1(第1行的加法)* 50(第1行的比率)= 2450

非常感谢任何帮助。

干杯,

迪。

1 个答案:

答案 0 :(得分:2)

如果你想要一个单行查询而没有运行子查询,临时表,CTE,group by子句或者你有什么的麻烦,只需尝试清理查询:

SELECT sum((DAY1+DAY2+DAY3+DAY4+DAY5+DAY6+DAY7+DAY8+DAY9+DAY10+DAY11+DAY12+DAY13+DAY14) * RATE * OT) as TOTALL FROM from TIMESHEET INNER JOIN RATES on TIMESHEETS.RATE-ID = RATES.ID

SQL有多种方法可以实现相同的结果。尝试不同的类型,找到适合自己和应用程序的类型。