【发布时间】:2014-06-06 17:25:58
【问题描述】:
我有以下疑问:
SELECT DISTINCT [WL].[Id]
,[WL].[UserId]
,[WL].[DIF]
,[WL].[MW]
,[WL].[Notes]
,[WL].[WDate]
,[WL].[CB]
,[WL].[MPH]
,[U].[Id]
,[U].[UserName]
,[U].[We]
,[U].[SLength]
,[U].[UP]
,[U].[PU]
,[U].[ANumber]
,[U].[G_CK]
FROM
[Wsite].[dbo].[WLog] as WL
INNER JOIN
[Wsite].[dbo].[Users] AS U ON [U].[Id] = [WL].[UserId]
WHERE
[WL].[WDate] >= CONVERT(datetime, '2012-01-01 00:00:00', 120)
AND [WL].[WDate] <= CONVERT(datetime, GETDATE(), 120)
GROUP BY
[WL].[UserId]
我得到的错误是:
选择中的列“Wsite.dbo.WLog.Id”无效 列表,因为它既不包含在聚合函数中,也不包含在聚合函数中 GROUP BY 子句。
如果列表中有多个UserID,我想要的只是合并数据。
举个例子:
Id | UserId | .... | Id | UserName | SLength | ....
5843| 99304 | .... | 99304| Bob Barker | 14 | ....
5844| 06300 | .... | 06300| Dean Martin | 104 | ....
5845| 99304 | .... | 99304| Bob Barker | 8 | ....
5846| 99304 | .... | 99304| Bob Barker | 11 | ....
5847| 7699 | .... | 7699 | John Doe | 0 | ....
所以它应该是这样的:
Id | UserId | .... | Id | UserName | SLength | ....
5843| 99304 | .... | 99304| Bob Barker | 33 | ....
5844| 06300 | .... | 06300| Dean Martin | 104 | ....
5847| 7699 | .... | 7699 | John Doe | 0 | ....
请注意,Bob Barker 的 SLength 已合并 (14+8+11=33)。
任何帮助都会很棒!谢谢!
更新
SELECT DISTINCT
MIN([WL].[Id]) AS [WLID]
,MIN([WL].[UserId]) AS [WLUD]
,SUM([WL].[DIF]) AS [DIF]
,SUM([WL].[MW]) AS [MW]
,[WL].[Notes]
,[WL].[WDate]
,SUM([WL].[CB]) AS [CB]
,SUM([WL].[MPH]) AS [MPH]
,MIN([U].[Id] AS [UID]
,MIN([U].[UserName] AS [UUserName]
,[U].[We]
,SUM([U].[SL]) AS [SL]
,[U].[UP]
,[U].[PU]
,[U].[ANumber]
,[U].[G_CK]
FROM [Wsite].[dbo].WLog as WL
INNER JOIN [Wsite].[dbo].[Users] AS U
ON [U].[Id] = [WL].[UserId]
WHERE [WL].[WDate] >= CONVERT(datetime, '2012-01-01 00:00:00', 120)
AND [WL].[WDate] <= CONVERT(datetime, GETDATE(), 120)
GROUP BY
[WL].[Notes]
,[WL].[WDate]
,[U].[We]
,[U].[UP]
,[U].[PU]
,[U].[ANumber]
,[U].[G_CK]
ORDER BY [U].[UserName] DESC
【问题讨论】:
-
除了
Id字段和SLength字段之外,所有其他字段是否都将包含相同的数据?
标签: sql sql-server sql-server-2008 group-by inner-join