Sql server 如何在Select中使用筛选其他列的方法对同一列进行计数

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

如何在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 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