【问题标题】:Query only data during current month只查询当月数据
【发布时间】:2013-03-08 09:57:39
【问题描述】:

我有一个简单的 SQL 查询如下:

select   ProjectNo,
         CostCat,
         SummaryCostCat,
         CreditorEmployeeName,
         UnitCost,
         TotalCost,
         TransactionDate
from dbo.NGPCostPosition

这给了我如下的数据选择:

我想做的是在我的数据中创建一个名为“CurrentValue”的新列,它将根据当前月份的交易日期计算每个 TotalCost 值。

理想情况下,这会随着我进入新的一个月而改变。

下图就是一个例子:-

CurrentValue 表示当前月份的数字。

【问题讨论】:

  • 您的第一张数据图像甚至与第二张图像中的预期结果不匹配。你能澄清你想要做什么吗?请使用您的表结构、示例数据和所需结果以及您当前使用的任何查询来编辑问题。
  • 对不起,我已经更新了整个问题,试图让我想要做的事情更清楚

标签: sql tsql sql-server-2005 ssms


【解决方案1】:

这将使用索引,与将日期时间转换为字符串然后返回日期的“技巧”不同,或者对您的列使用DATEPART

WHERE TransactionDate >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
AND TransactionDate < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())+1, 0);

更整洁?

DECLARE @ms SMALLDATETIME, @me SMALLDATETIME;
SET @ms = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0);
SET @me = DATEADD(MONTH, 1, @ms);

SELECT
...
WHERE TransactionDate >= @ms AND TransactionDate < @me;

随着需求的不断变化,如何使用上面显示的@ms/@me变量,然后:

CurrentValue = CASE 
  WHEN TransactionDate >= @ms AND TransactionDate < @me
  THEN TotalCost END

另外请注意,如果您要执行某种聚合,TransactionDate 不应出现在您的分组列中。如果您向我们展示您真正想要的结果,我们可以编写您的整个查询 - 乍一看,您的列列表和分组并没有真正意义,因此根据您的实际问题,我掩盖了这些问题,以便我们可以专注于实际 @ 987654326@子句。

【讨论】:

  • 我已经更新了我原来的 qst 以包含我想要实现的示例
  • @user1086159 抱歉,我仍然不了解您在做什么。输出与任何输入都不匹配,所以我不知道您是否在汇总,如果您列出个别日期,那么“当前月份”是什么意思,等等。
  • 对不起,我已经更新了整个问题,试图让我想要做的事情更清楚
【解决方案2】:

您可以使用 DATEPART 函数检查月份和年份:

WHERE DATEPART(month, GETDATE()) = DATEPART(month, Date)) 
AND (DATEPART(year, GETDATE()) = DATEPART(year, Date)

【讨论】:

  • 昂贵,不会使用索引。
【解决方案3】:
select   ProjectNo,
         CostCat,
         SummaryCostCat,
         CreditorEmployeeName,
         UnitCost,
         TotalCost,
         TransactionDate,
         CASE WHEN DATEPART(month, TransactionDate) = DATEPART(month, GETDATE()) AND
                   DATEPART(year, TransactionDate) = DATEPART(year, GETDATE()) THEN
                     TotalCost
               ELSE NULL
          END AS CurrentValue
from dbo.NGPCostPosition

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 2013-09-04
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多