【问题标题】:Make a variable dynamic enough alter value based on month根据月份使变量足够动态地改变值
【发布时间】:2020-04-27 13:34:24
【问题描述】:

有没有办法在每次调用时通过 12 个数字在变量循环中添加一个变量?我可能只是在 SQL 循环逻辑方面营养不良。这是我拥有的变量,目前我只能让它保存一个静态数字。

SET @startEnr = (SELECT COUNT(*) 
     FROM Enrollment
     WHERE MONTH(startDate) = 09
     AND active = 1
     AND endYear = 2020

值 09 需要保存 12 个值,就像 @x = 1...12。我尝试循环这个,但是返回一个错误,指出该变量不能包含多个值。我需要一个函数吗?

【问题讨论】:

  • 完全不清楚你要做什么。
  • 您不会调用变量,而是为其分配一个值或读取该值。请解释为什么您需要您所描述的内容。
  • 应不惜一切代价避免循环。你肯定想要一个循环。但是由于您正在尝试评估 12 个月份的值,所以我必须首先询问检查月份的意义。正好有 0 个月不在 1 到 12 之间。您需要在此处说明您真正想要完成的工作,以便其他人了解如何帮助您。
  • 我正在尝试统计每个月的总注册数据。我想将所有这些总数保存在一个变量中,就好像它是一个数组一样。也许我错过了一些东西,但我所知道的是,唯一可以远程执行此操作的是临时表本身。顺便说一句,感谢您的关注。
  • @JaySway tsql 中唯一真正的“数组”是一个表。这听起来像XY problem,所以最好从你的目标而不是这个特定的实现路径(现在可能会起作用)的角度来处理这个问题。那么 - 您打算如何处理要计算的许多每月总注册值?

标签: sql-server variables dynamic


【解决方案1】:

正如评论者所指出的,SQL 中唯一真正的数组是表。我认为您正在寻找的是这样的:

CREATE TABLE #mthEnroll (mth int, cnt int)

INSERT INTO #mthEnroll (mth, cnt)
SELECT MONTH(startdate), COUNT(*) 
     FROM Enrollment
     WHEREactive = 1
     AND endYear = 2020
    GROUP BY MONTH(startdate)

DROP TABLE #mthEnroll

如果您有可能有几个月没有条目(例如,7 月份入学的 0 名学生不会连续),您可能需要做一些修改,但如果有必要获得 0,还有其他方法。

【讨论】:

  • 这很有帮助。我一直在处理这个问题,就好像我在使用不同的语言一样。非常感谢大家。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多