Sql server 如何在Select中使用筛选其他列的方法对同一列进行计数
如何在SQL Server中按筛选器计算同一列: 下表:Sql server 如何在Select中使用筛选其他列的方法对同一列进行计数,sql-server,Sql Server,如何在SQL Server中按筛选器计算同一列: 下表: id CodeType Code 1 I C001 1 I M002 2 I C002 2 M M003 3 I C002 3 M M003 Sql输出应如下所示: Count WHEN CodeType I and Code C001 with M002 :1 Count WHEN CodeType I and Cod
id CodeType Code
1 I C001
1 I M002
2 I C002
2 M M003
3 I C002
3 M M003
Sql输出应如下所示:
Count WHEN CodeType I and Code C001 with M002 :1
Count WHEN CodeType I and Code C002 with M003 :2
如何使用SQL Server实现这一点尝试使用COUNT(*)OVER(Partition by)
让我们制作示例数据:
DECLARE @MyTable TABLE
(
id INT,
CodeType VARCHAR(1),
Code VARCHAR(10)
)
INSERT INTO @MyTable
( id, CodeType, Code )
VALUES
(1, 'I', 'C001'),
(1, 'I', 'M002'),
(2, 'I', 'C002'),
(2, 'M', 'M003'),
(3, 'I', 'C002'),
(3, 'M', 'M003');
现在我们已经有了数据,看起来您想要为每个C记录找到对应的M记录(基于ID),一旦获得了集合,您就要寻找重复的记录。您还将检查C记录类型是否为“I”
SELECT c.CodeType, c.Code, m.Code, COUNT(*) AS GrpCnt
FROM @MyTable c
INNER JOIN @MyTable m
ON c.id = m.id
AND c.Code LIKE 'C%'
AND m.Code LIKE 'M%'
WHERE c.CodeType = 'I'
GROUP BY c.CodeType, c.Code, m.Code
以下是输出:
CodeType Code Code GrpCnt
I C001 M002 1
I C002 M003 2
希望这对您有所帮助。您的问题不是很清楚,请按代码类型从tablename组中选择代码类型、代码、计数(id)作为countid,代码为什么在两个M003行都有代码类型M时,您会说有2个“当代码类型I时,代码C002带有M003”?你需要解释你想要的结果背后的逻辑,因为它不是不言自明的。
CodeType Code Code GrpCnt
I C001 M002 1
I C002 M003 2