当前位置: 首页 > 面试题库 >

SQL总和MTD和YTD

柴瀚
2023-03-14
问题内容

我才刚刚开始研究SQL。

我有一个SQL Server 2008r2数据库,它将返回两个字段DocDate和InvValue。我需要将InvValues汇总为今天的MTD和YTD,所以看起来像

**Period** ///////  **Total value**
MTD        ////////////111111.11
YTD       /////////////999999.99

我已经做了大量的Google搜寻,并且可以使用SUM&DATEPART进行一项或多项,但是我坚持尝试两者兼而有之。

有人可以给我一些伪代码,以帮助我进一步谷歌。

谢谢@戈登·利诺夫(Gordon Linoff),这对我有所帮助,我学到了一些东西,这对我将来会很有用。我的代码现在看起来像:

SELECT
SUM(CASE WHEN YEAR(T1.[DocDate]) = YEAR(GETDATE()) THEN T0.[TotalSumSy] END) AS YTD,
SUM(CASE WHEN YEAR(T1.[DocDate]) = YEAR(GETDATE()) AND MONTH(T1.[DocDate]) = MONTH(GETDATE()) THEN T0.[TotalSumSy] END) AS MTD

FROM [dbo].[INV1] T0 INNER JOIN [dbo].[OINV] T1 ON T1.[DocEntry] = T0.[DocEntry]

但是我现在得到

YTD.........MTD
99999.99....111111.11

我需要

YTD........99999.99
MTD........11111.11

任何进一步的帮助,将不胜感激。


问题答案:

SELECT
Period = ‘MTD’,
Total_value = SUM(T0.TotalSumSy)
FROM dbo.INV1 T0
INNER JOIN dbo.OINV T1
ON T1.DocEntry = T0.DocEntry
WHERE
T1.DocDate >= DATEADD(month,DATEDIFF(month,‘20010101’,GETDATE()),‘20010101’)
AND
T1.DocDate < DATEADD(month,1+DATEDIFF(month,‘20010101’,GETDATE()),‘20010101’)


UNION ALL

SELECT
  'YTD', 
  SUM(T0.TotalSumSy) 
FROM dbo.INV1  T0 
  INNER JOIN dbo.OINV  T1 
     ON T1.DocEntry = T0.DocEntry
WHERE 
    T1.DocDate >= DATEADD(year,DATEDIFF(year,'20010101',GETDATE()),'20010101')
  AND 
    T1.DocDate < DATEADD(year,1+DATEDIFF(year,'20010101',GETDATE()),'20010101') ;

WHERE使用子句中的(复杂)条件来代替之前YEAR(column) = YEAR(GETDATE()和之前的条件,因此可以使用索引。如果将函数应用于列,则会使索引不可用(某些函数和SQL
Server的某些版本存在一些次要例外)。因此,最好的办法是尝试将条件转换为这种类型:

column <operator> AnyComplexFunction()


 类似资料:
  • 问题内容: 我已经寻找了一段时间,但找不到该问题的答案(也许我没有搜索正确的术语或其他内容)。基本上,我有一个数据库,每个日期有任意数量的条目。我需要获取包含条目的最近X天的总和(忽略没有条目的天)。我知道如何找到每一天的总和。 假设我有一个名为“ Yield”的表格: 然后,我使用以下查询: 要获取每天的通过/测量的总数,请执行以下操作: 然后,我需要一个查询,该查询可以调用一个日期(例如我称它

  • 问题内容: 假设我有一张桌子: 这将返回自特定日期以来销售数量的产品清单。有没有一种方法不仅可以选择这个和,而且还可以选择没有where条件的和?我想查看每种产品自特定日期以来的销售情况以及所有(没有日期限制)的销售情况。 问题答案:

  • 问题内容: 我工作的一个SQL查询的表有两列,并应返回的总和列的值,直到达到它也应该返回的值列在该河段的排序条件为 例如,我的数据如下 在上表中,金额总计应在按日期排序之后进行计算,并且一旦金额达到5000分,应返回金额及其关联的日期的总计。 排序数据后,它变成如下所示 查询应返回以下结果 上述结果是因为总和达到在 我可以知道一种更好的方法来处理它吗 问题答案: 对于SQL Server,您可以使

  • 问题内容: 我在mySQL中有一个带有以下各列的表: TRANS_TYPE可以是“ DRINV”(销售)或“ DRCDT”(信用)。 我想获取每个客户的总销售额,因此到目前为止,我的查询是: 问题是这是销售 和 积分的总和,而不是销售减去积分。我希望结果是 是否可以在SQL查询中执行此操作? 问题答案:

  • 问题内容: 我需要编写一个查询,该查询从表中返回汇总和非汇总数据。 下面的示例应有助于阐明我要执行的操作。我有以下(简化)表: 为了便于讨论,假设每个学生都属于一个课程组。我想编写一个查询,该查询将返回如下结果集: student.name,student.weight,weight_apgaw,weight_apgh 在哪里: weight_apgaw: 是单个学生的体重,表示为他/她所属课程组

  • 我在实施业务解决方案时面临着1个可能性。任何帮助将不胜感激。 有一个包含3列的表。 表员工(身份证,姓名,工资)值-(1,约翰,10000),(2,雷伊,15000),(3,约翰,20000) 预期输出-它应该只获取不同的员工,对于员工的重复记录,它应该获取工资的总和。 所以,输出应该是这样的-(1, john,30000),(2, Rey,15000) 请帮帮忙