【发布时间】:2014-05-27 04:56:32
【问题描述】:
我认为标题有点偏离我的需要,所以如果有人想到更好的标题,请不要犹豫更改它。
我的问题是:我有一个 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 个单独的列告诉我总小时数、OT 乘数和费率。现在是我正在努力的部分。我似乎无法将 TOTALHOURS 列与任何内容相乘。我可以做简单的OT * RATE as NEWRATE 并将其简化为 2 列:TOTALHOURS 和 NEWRATE。
我的问题是,如何将这两个动态命名的列相乘得到结果?
即第一个将是 49(第 1 行的总和)* 1(第 1 行的 OT)* 50(第 1 行的费率)= 2450
非常感谢任何帮助。
干杯,
迪。
【问题讨论】:
-
想了想,使用子查询来实现这些类型的东西,或者临时表。
-
你可以把你的查询放到一个CTE,然后计算结果
-
@Grigor 我刚刚进入 SQL 世界,所以我将继续阅读有关子查询和临时表的内容。谢谢!
-
@cha 谢谢。我会看一下公用表表达式,然后再回复你。再次感谢!
-
你也可以这样做:
select (sum(day1)+sum(day2)+....)*OT*RATES.RATE AS Total FROM...
标签: sql sql-server math join multiplication