首页 > 解决方案 > 如何将行聚合到一个月

问题描述

我正在尝试合并从另一个表中选择的数据。

该表有一个名为的列IdClient_PK,它是一个唯一ID,一个列DateJoinKey是该用户查看页面的日期。

我想将所有内容DateJoinKey合并为一个月。例如:

IDClient_PK 日期加入键 意见
0E984725-C51C-4BF4-9960-E1C80E27ABA0 01-1-2021 2
0E984725-C51C-4BF4-9960-E1C80E27ABA0 01-3-2021 1
0E984725-C51C-4BF4-9960-E1C80E27ABA0 01-14-2021 3
0E984725-C51C-4BF4-9960-E1C80E27ABA0 01-21-2021 1

我试图得到一个看起来像这样的结果:

IDClient_PK 日期加入键 意见
0E984725-C51C-4BF4-9960-E1C80E27ABA0 01-1-2021 7

我怎么能做到这一点?

我尝试FORMAT()在 SQL 中使用该语句,但遇到错误:Conversion failed when converting date and/or time from character string.

这是我的查询示例:

CREATE TABLE #tmpModule2(
        [IdClient_PK] uniqueidentifier,
        [DateJoinKey] DATETIME,
        [Views] INT 
)


INSERT INTO #tmpModule ([IdClient_PK],[DateJoinKey], [Views] )
SELECT          a.[IdClient_PK],
                FORMAT(a.DateJoinKey, 'yyyy-MM'),
                SUM(a.ViewValue)
FROM  [usage].[Fact_RegisteredUsers_UserReport] a
GROUP BY
a.IdClient_PK,
FORMAT(a.DateJoinKey, 'yyyy-MM'),

标签: sqlsql-server

解决方案


FORMAT()返回一个NVARCHAR数据类型,但您的临时表将该列作为DATETIME. 您可以更改您CREATE以使用正确的数据类型或SELECT INTO如下所示。或者,您可以DATETIME在插入临时表之前将上面的返回列转换为 a。

SELECT          a.[IdClient_PK],
                FORMAT(a.DateJoinKey, 'yyyy-MM') as [DateJoinKey],
                SUM(a.ViewValue) AS [Views]
INTO #tmpModule
FROM  [usage].[Fact_RegisteredUsers_UserReport] a
GROUP BY
a.IdClient_PK,
FORMAT(a.DateJoinKey, 'yyyy-MM')

推荐阅读