请教一条统计SQL语句

qq_22264283 2023-08-18 09:25:11

我的数据如下:

AID    AValue    BValue
A    0    0
A    0    0
A    1    0
A    1    1

我想一条SQL语句统计出AValue=1的数据,BValue=1的数据,结果如下 :
AID    AValueCnt    BValueCnt
A    2        1

对Count函数中的表达式不太会用,看有些写成Count( AValue='1' or null),但在ms sql server 14这个版本中,执行不了。

谢谢!


 

...全文
160 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
DragonsUyz 2023-08-20
  • 打赏
  • 举报
回复

你可以使用 COUNT 函数和 CASE 语句来解决这个问题。下面是一个可能的 SQL 查询:

SELECT AID,  
       COUNT(CASE WHEN AValue = 1 THEN 1 ELSE NULL END) AS AValueCnt,  
       COUNT(CASE WHEN BValue = 1 THEN 1 ELSE NULL END) AS BValueCnt  
FROM your_table  
GROUP BY AID;

在这个查询中,CASE 语句用于检查 AValue 和 BValue 是否等于 1,如果是,则返回 1,否则返回 NULL。COUNT 函数对返回的 1 进行计数。通过 GROUP BY 子句,我们可以按 AID 进行分组,以便为每个 AID 计算 AValueCnt 和 BValueCnt。

请注意,你需要将 your_table 替换为实际的表名。

吉普赛的歌 版主 2023-08-18
  • 打赏
  • 举报
回复 1

USE tempdb
GO
IF OBJECT_ID('dbo.[t]') IS NOT NULL 
    DROP TABLE dbo.[t]
GO
CREATE TABLE dbo.[t](
[AID] VARCHAR(10)
,[AValue]INT
,[BValue] INT    
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[t] VALUES(N'A',N'0',N'0')
INSERT INTO dbo.[t] VALUES(N'A',N'0',N'0')
INSERT INTO dbo.[t] VALUES(N'A',N'1',N'0')
INSERT INTO dbo.[t] VALUES(N'A',N'1',N'1')

----------- 以上为测试表及测试数据 -----------

SELECT AID,
    SUM(CASE WHEN AValue=1 THEN 1 ELSE 0 END) AS AValue,
    SUM(CASE WHEN BValue=1 THEN 1 ELSE 0 END) AS BValue
FROM t
WHERE t.AValue=1 OR t.BValue=1
GROUP BY AID
/*
AID    AValue    BValue
A    2        1
*/
qq_22264283 2023-08-18
  • 举报
回复
@吉普赛的歌 谢谢版主

34,618

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧