【问题标题】:SQL Datepart, multiply columns for a weekly sumSQL Datepart,将列乘以每周总和
【发布时间】:2017-01-29 18:18:04
【问题描述】:

我发现我必须使用DATEPART如果我想以每周的方式查看数据,我只是不知道如何将我的 SQL 查询放在一起。

到目前为止,我已经知道了,这是一般的想法。

var querythis = "SELECT DATEPART(wk, (kg * sett * rep)) as weeklyvol FROM Test GROUP BY date, kg, sett, rep";

所以,kgsettrep 是我的 3 个数据库列,还有 date 当然是 datetime,这 3 个都是 integers 所以我想将它们相乘每周总计。

例如:

24 Jan 2017 - 100 x 10 x 3 = 3000
25 Jan 2017 - 100 x 5 x 5 = 2500
26 Jan 2017 - 150 x 3 x 3 = 1350

这将导致第 4 周 = 6850

GROUP BY date, kg, sett, rep";

我实际上不确定上面的行^部分代码是做什么的,我必须包括所有这些,否则我会出错。

目前,当我像下面这样写出来时它没有错误,但它没有给我想要的结果,我什至不知道数字来自哪里,但至少不正确。

foreach (var c in db.Query(querythis))
{
    <a>@c.weeklyvol</a><br />
}

有人知道怎么做吗?

如果有什么不同的话,我正在使用 SQL Server Compact。

【问题讨论】:

    标签: c# sql razor sql-server-ce datepart


    【解决方案1】:

    你正在寻找这样的东西:

    SELECT 
      DATEPART(wk, date),
      sum(kg * sett * rep) as weeklyvol 
    FROM 
      Test 
    GROUP BY 
      DATEPART(wk, date)
    

    这将从您的日期开始计算一周,并与之分组,并将成交量总和显示为第二列。您可能希望在 datepart 中使用 isowk 而不是 wk

    如果您还需要年份,则使用 datepart(year... 无法正常工作,请参阅例如 this link。如果没有它,第 52 周、第 53 周和第 1 周的日期可能会出现错误的年份。

    【讨论】:

    • 酷,这绝对成功了!但是,我看到当它改变年份时,它只按周数而不是日期排序,这是我可以解决的问题吗?即从 2016 年第 52 周到 2017 年第 1 周,它将第 1 周的结果放在第 52 周之前!
    • 是的,isowk 似乎在我的国家被推荐!
    • 您可以为年份添加另一列,并将其添加到分组依据。最大的问题是没有为 iso 周获取正确年份的功能,因为对于第 52/53/1 周,年份并不总是正确的。有examples如何为此创建函数。
    • 好的!我会调查的!感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    相关资源
    最近更新 更多