我正在尝试对此表进行查询。数据如下所示:
--------------------------------
| Message_Time | User | Message|
--------------------------------
|y-m-d H:M:S |User1 | msg-body
|y-m-d H:M:S |User1 | msg-body
|y-m-d H:M:S |User1 | msg-body
|y-m-d H:M:S |User2 | msg-body
|y-m-d H:M:S |User2 | msg-body
我正在尝试选择用户并计算每个用户发送的邮件数量
我试图从该数据库中选择一个,并在“用户”列上进行区分,并在“消息”列上进行计数,但是我一直遇到错误。我确定我没有采用正确的方法。
我尝试了以下查询:
SELECT DISTINCT(USER) AS [User_ID], COUNT(Message) AS [Messages_Sent]
FROM [dbo].[Table]
这是我想要的输出:
--------------------------
| User_ID | Messages_Sent|
--------------------------
|User1 | 3 |
|User2 | 2 |
但是不幸的是,这是发生的错误:
Operand data type ntext is invalid for count operator.
任何帮助都会很棒,谢谢。
答案 0 :(得分:2)
使用GROUP BY
和COUNT(*)
:
SELECT USER AS [User_ID], COUNT(*) AS [Messages_Sent]
FROM [dbo].[Table]
GROUP BY USER;
大概Message
永远不会是NULL
,所以这样做也是一样。
将text
替换为nvarchar(max)
或varchar(max)
。 text
已过时。正如documentation所述:
重要!在将来的SQL Server版本中,将删除ntext,text和image数据类型。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。改用nvarchar(max),varchar(max)和varbinary(max)。
答案 1 :(得分:0)
使用分组依据进行
SELECT USER AS [User_ID], COUNT(*) AS [Messages_Sent]
FROM [dbo].[Table]
GROUP BY USER
此返回的行不为空
聚集功能始终返回不同的结果
SELECT USER AS [User_ID], COUNT(message) AS [Messages_Sent]
FROM [dbo].[Table]
GROUP BY USER
这将返回列值不为null的计数
答案 2 :(得分:0)
修复数据类型,然后查询将正常工作
ALTER TABLE dbo.[Table] ALTER COLUMN Message nvarchar(MAX);
在评论ntext
中已经提到,已弃用多年,现在已经是停止使用它并使用正确的了。