【问题标题】:SQL Query - Mathematical Query across 2 tablesSQL 查询 - 跨 2 个表的数学查询
【发布时间】: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


【解决方案1】:

如果您想要一个单行查询,而无需运行子查询、临时表、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 有多种方法可以实现相同的结果。尝试不同的,找到适合您和应用的类型。

【讨论】:

  • @DeeKayy90 虽然这可能会做你想做的事,但我强烈建议你学习做这些事情的正确方法。临时表、子查询等...干杯!
  • @Grigor 我绝对会这样做!您是否有任何了解的特定资源可以帮助我进行更好的查询?谢谢!
  • Google 是您的朋友,@DeeKayy90。我个人从工作中获得了大部分 SQL 知识。很难想出“场景”并为它们编写 SQL。现在,我采访了许多声称“8/10 的 SQL 知识”(很可能来自在线教程)但展示了 3-4/10 知识的人。无论你消化什么资源,你都不会涵盖“一切”。如果你继续使用 SQL,技巧就会到来。快乐的编码!
  • 呵呵,我就是这样学习的。那和我有几个在该领域工作时间更长的同事,我为他们的知识纠缠不清!不过,我会继续谷歌搜索。那里有大量的信息。再次感谢@Grigor 的所有帮助,非常感谢。
  • @DeeKayy90 很高兴!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 2015-12-09
相关资源
最近更新 更多