sql server—分别对列中的值进行计数,并为每个计数返回不同的行[sql]

xv8emn3q  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(335)

我在表格中有以下数据:
表X

ID   COMPANY_ID  Procedure
-----------------------
1       1         TST1 
2       2         TST1
3       3         CHK1 
4       4         CHK2
5       5         TST3
6       6         TST3

我想计算sql中包含每个过程的公司的数量,其中一个过程可以由多个不同的代码表示(例如,tst1和tst3表示同一个过程)。

Procedure   Count  
-----------------------
TST*          4           
CHK*          2

是否可以只使用一个查询来执行此操作?请注意,所有以tst开头的过程是如何计数在一起的,即使它们以1或3结尾。这导致总计数为4,而chk程序的计数为2。

iecba09b

iecba09b1#

试一试:

select substring(procedure,1,3) as pro, count(company_id) from your_table
group by substring(procedure, 1,3);
x8diyxa7

x8diyxa72#

使用 Like 操作员输入 CASE 实现此目的的表达式:

DECLARE @T TABLE(
ID INT IDENTITY (1,1),
Company_ID INT ,
[Procedure] VARCHAR(10))

INSERT INTO @T VALUES(1,'TST1')
INSERT INTO @T VALUES(2,'TST1')
INSERT INTO @T VALUES(3,'CHK1')
INSERT INTO @T VALUES(4,'CHK2')
INSERT INTO @T VALUES(5,'TST3')
INSERT INTO @T VALUES(6,'TST3')

主要查询:

SELECT CASE WHEN [PROCEDURE] LIKE 'TST%'THEN'TST*'
            WHEN [PROCEDURE] LIKE 'CHK%'THEN'CHK*' END AS [PROCEDURE]
        ,COUNT(COMPANY_ID) AS [COUNT] FROM @T
GROUP BY CASE WHEN [PROCEDURE] LIKE 'TST%'THEN 'TST*'
              WHEN [PROCEDURE] LIKE 'CHK%'THEN 'CHK*' END

相关问题