34,499
社区成员




我的数据如下:
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这个版本中,执行不了。
谢谢!
你可以使用 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 替换为实际的表名。
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
*/