在SQL中,如何使用包含不同值的列的Count()ID? [英] in SQL,how to Count() ids of column containing different values ?

查看:70
本文介绍了在SQL中,如何使用包含不同值的列的Count()ID?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个名为FollowupMaster的表,其中包含所有员工的条目。

它有一个名为'FollowupMode'的列,其中包含字符串值,如'Call','Housecall', '电子邮件','短信'..

现在我需要计算'Housecall'的数量,每个员工的'来电'




  1   1   2014-02-12   00:00:00  000  调用  Switch   Off   Mobile   2014-03-13   00:00:00  000   19   NULL   1   2014-03-28   07:28:55  453   NULL  
2 56 2014-04-05 00:00:00 000 Call WILL TELL US 星期一 2014-04-07 00:00:00 000 28 2 1 2014-04-05 01:49:10 730 NULL
3 57 2014-04-04 00:00:00 000 调用 COME WITH PARENTS FOR VISIT 2014-04-06 00:00:00 。< span class =code-leadattribute> 000 30 2 32 2014-04-05 04:26:37 610 NULL
4 827 2007-01-06 00:00:00 000 House 致电 next week 2007-01-13 00:00:00 000 34 4 37 2014-04-26 7点11分16秒. 500 NULL
5 827 2007-01-13 00:00 :00 000 电子邮件 not not not not 2007-01-15 00:00:00 000 34 4 37 2014-04-26 07:11:46 497 NULL
6 827 2007-01-13 00:00:00 000 < span class =code-leadattribute>调用 sda 2007-01-20 00:00:00 000 33 4 37 2014-04-26 07:13:57 397 NULL
7 83 2013-06-06 00:00:00 000 致电 Fiist 2013-06-06 00:00:00 000 34 4 37 2014-04-29 07:19:11 673 NULL
8 817 2014-05-26 00:00:00 。< span class =code-leadattribute> 000 House 调用 下一步 时间 2014-05-28 00:00:00 . 000 29 0 < span class =code-leadattribute> 28 2014-05-26 14:14:53 703 NULL
9 817 2014-05-28 00:00: 00 000 调用 Over 2014-05-30 00:00:00 000 30 0 28 2014-05-26 14:15:37 670 NULL
10 818 2014-05-26 00:00:00 000 House 调用 尝试 2014-05-28 00:00:00 000 < span class =code-leadattribute> 31 0 28 2014-05-26 14:26:18 020 NULL
11 818 2014- 05-28 00:00:00 000 SMS 2nd try 2014-05 -30 00:00:00 000 31 0 28 2014-05- 26 14:26:40 480 NULL
12 816 2014 -05-26 00:00:00 000 调用 尝试 2014-05-28 00:00:00 。< span class =code-leadattribute> 000 28 2 28 2014-05-26 14:35:50 533 NULL
13 816 2014-05-28 00:00:00 000 House 调用 T 2014-05-30 00:00:00 000 28 2 28 2014-05-26 14:49:32 687 NULL
14 949 2014-05-26 00:00:00 000 House 调用 11 2014-05-28 00:00:00 000 30 2 30 2014-05-26 20:07:31 183 NULL
15 950 2014-05-26 00:00:00 000 SMS 222 2014-05-30 < span class =code-leadattribute> 00:00:00 。 000 30 < span class =code-leadattribute> 2 30 2014-05-26 20: 14:55 。 677 已关闭
16 818 2014-05-28 00:00:00 000 SMS aas 2014-05-28 00:00:00 000 30 2 28 2014-05-27 10:17:29 387 NULL
17 818 2014-05-28 00:00:00 000 < span class =code-leadattribute> House 调用 test 2014-05-30 00:00:00 000 30 2 28 2014-05-27 10:24:20 437 NULL
18 818 2014-05-28 00:00:00 000 House 调用 test 2014- 05-30 00:00:00 000 30 2 28 2014-05 -27 10:33:08 023 NULL
19 816 2014-05-26 00:00:00 000 电子邮件 2nd tym 2014年5月30日 00:00:00 000 28 2 28 2014-05-27 10:43:44 510 NULL
20 950 2014-05-26 00:00:00 000 SMS Enq1 2014-05-28 00:00 :00 000 30 2 30 2014-05-27 12:32:03 283 已关闭
21 950 2014-05-28 00:00:00 000 电子邮件 结束 2014-05-28 00:00:00 000 30 2 30 2014-05-27 12:32:46 873 Cl osed
22 950 2014 -05-28 00:00:00 000 电子邮件 结束 2014-05-28 00:00:00 000 30 2 30 2014-05-27 12:33:20 460 已关闭

解决方案

您可以使用 SQL GROUP BY [ ^ ],例如

 选择 empIdColumn,计数(*)
来自 yourTable
其中 FollowupMode = ' 内务电话'
group FollowupMode,empIdColumn


员工ID和folloupMode上的分组条款将给你结果,甚至你可以在where子句中使用case语句。



问候,

Praveen Nelge

这里我使用了临时表来汇总所有必需的数据。

 创建  TABLE  ## GlobalTempTable1(

Empid int
Enq INT
Call1 int
HouseCall int
电子邮件 int
Sms int


声明 @ FranchiseId int
声明 @Empid int
声明 @ Enq int
声明 @Call int
声明 @ HouseCall int
声明 @ Email in t
声明 @ Sms int
声明 @ ID int

set @ ID = 2
选择 @Empid = max(followupby) 来自 ERP.FollowUpMaster 其中 franchiseid = 2
while @ ID < = @ Empid
开始
选择 @ HouseCall = count(followupid)来自 ERP.FollowUpMaster
其中 datepart(month,entrydate)= d atepart(month,getdate()) datepart(year,entrydate)= datepart(year,getdate())
- 和franchiseid = 2
followupby = @ ID < span class =code-keyword>和 followupmode = ' 内务电话'

选择 @Email = count(followupid)来自 ERP.FollowUpMaster
其中 datepart(month,entrydate)= datepart(month,getdate()) datepart(year,entrydate )= datepart(year,getdate())
- and franchiseid = 2
followupby = @ ID followupmode = ' 电子邮件'


选择 @Call = count(followupmode)来自 ERP .FollowUpMaster
其中 datepart(月,entrydate)= datepart(月,getdate()) datepart(year,entrydate)= datepart(year,getdate())
- and franchiseid = 2
followupby = @ ID followupmode = ' call'


select @sms = count(followupid)来自 ERP.FollowUpMaster
其中 datepart(月, entrydate)= datepart(month,getdate()) datepart(year,entrydate)= datepart(year,getdate())
- 和franchiseid = 2
followupby = @ID followupmode = ' 短信'
如果 @ HouseCall != 0 @Call != 0 @ Email != 0 @Sms != 0
开始
INSERT 进入 ## GlobalTempTable1(
- FranchiseId,
Empid,
- <跨度cl ass =code-comment> Enq,
Call1,
HouseCall,
电子邮件,
Sms



- @ franchiseId,
@ ID
@Call
< span class =code-sdkkeyword> @ HouseCall ,
@ Email
@Sms


END
SET @ franchiseId = ' '
SET @ Enq = ' '

SET @Sms = ' '
SET @Call = ' '
SET @ HouseCall = ' '
SET @ Email = ' '

SET @ID = @ ID + 1
END
选择 * 来自 ## GlobalTempTable1

drop table ## GlobalTempTable1


I have a table called FollowupMaster, which contains entries of all the employees .
It has a column named 'FollowupMode' which contains string values like 'Call','Housecall','Email','SMS'..
And now i need to count number of 'Housecall','call' made by Each employee


1   1   2014-02-12 00:00:00.000 Call    Switch Off  Mobile  2014-03-13 00:00:00.000 19  NULL    1   2014-03-28 07:28:55.453 NULL
2   56  2014-04-05 00:00:00.000 Call    WILL TELL US MONDAY 2014-04-07 00:00:00.000 28  2   1   2014-04-05 01:49:10.730 NULL
3   57  2014-04-04 00:00:00.000 Call    WILL COME WITH PARENTS FOR VISIT    2014-04-06 00:00:00.000 30  2   32  2014-04-05 04:26:37.610 NULL
4   827 2007-01-06 00:00:00.000 House Call  next week   2007-01-13 00:00:00.000 34  4   37  2014-04-26 07:11:16.500 NULL
5   827 2007-01-13 00:00:00.000 E-Mail  not     2007-01-15 00:00:00.000 34  4   37  2014-04-26 07:11:46.497 NULL
6   827 2007-01-13 00:00:00.000 Call    sda 2007-01-20 00:00:00.000 33  4   37  2014-04-26 07:13:57.397 NULL
7   83  2013-06-06 00:00:00.000 Call    Fiist   2013-06-06 00:00:00.000 34  4   37  2014-04-29 07:19:11.673 NULL
8   817 2014-05-26 00:00:00.000 House Call  Next Time   2014-05-28 00:00:00.000 29  0   28  2014-05-26 14:14:53.703 NULL
9   817 2014-05-28 00:00:00.000 Call    Over    2014-05-30 00:00:00.000 30  0   28  2014-05-26 14:15:37.670 NULL
10  818 2014-05-26 00:00:00.000 House Call  try 2014-05-28 00:00:00.000 31  0   28  2014-05-26 14:26:18.020 NULL
11  818 2014-05-28 00:00:00.000 SMS 2nd try 2014-05-30 00:00:00.000 31  0   28  2014-05-26 14:26:40.480 NULL
12  816 2014-05-26 00:00:00.000 Call    try 2014-05-28 00:00:00.000 28  2   28  2014-05-26 14:35:50.533 NULL
13  816 2014-05-28 00:00:00.000 House Call  t   2014-05-30 00:00:00.000 28  2   28  2014-05-26 14:49:32.687 NULL
14  949 2014-05-26 00:00:00.000 House Call  11  2014-05-28 00:00:00.000 30  2   30  2014-05-26 20:07:31.183 NULL
15  950 2014-05-26 00:00:00.000 SMS 222 2014-05-30 00:00:00.000 30  2   30  2014-05-26 20:14:55.677 Closed
16  818 2014-05-28 00:00:00.000 SMS aas 2014-05-28 00:00:00.000 30  2   28  2014-05-27 10:17:29.387 NULL
17  818 2014-05-28 00:00:00.000 House Call  test    2014-05-30 00:00:00.000 30  2   28  2014-05-27 10:24:20.437 NULL
18  818 2014-05-28 00:00:00.000 House Call  test    2014-05-30 00:00:00.000 30  2   28  2014-05-27 10:33:08.023 NULL
19  816 2014-05-26 00:00:00.000 E-Mail  2nd tym 2014-05-30 00:00:00.000 28  2   28  2014-05-27 10:43:44.510 NULL
20  950 2014-05-26 00:00:00.000 SMS Enq1    2014-05-28 00:00:00.000 30  2   30  2014-05-27 12:32:03.283 Closed
21  950 2014-05-28 00:00:00.000 E-Mail  Closing 2014-05-28 00:00:00.000 30  2   30  2014-05-27 12:32:46.873 Closed
22  950 2014-05-28 00:00:00.000 E-Mail  Closing 2014-05-28 00:00:00.000 30  2   30  2014-05-27 12:33:20.460 Closed

解决方案

You can use SQL GROUP BY[^], for example

select empIdColumn, Count(*)
from yourTable 
where FollowupMode = 'House Call'
group by FollowupMode,empIdColumn


Group by clause on the employee id and folloupMode would give you the result or even you can use case statement in where clause.

Regards,
Praveen Nelge


Here i have used temparory Table for concating all required data.

CREATE TABLE ##GlobalTempTable1(
	
	Empid int,
	Enq int,
	Call1 int,
	HouseCall int,
	Email int,
	Sms int 
	
)
declare @FranchiseId int
declare @Empid int
declare @Enq int
declare @Call int
declare @HouseCall int
declare @Email int
declare @Sms int
declare @ID int

set @ID = 2
select @Empid = max(followupby) from ERP.FollowUpMaster where franchiseid=2 
while (@ID <= @Empid)
begin
	select @HouseCall=count(followupid) from ERP.FollowUpMaster 
	where datepart(month,entrydate)=datepart(month,getdate()) and datepart(year,entrydate)=datepart(year,getdate())
	--and franchiseid=2 
	and followupby=@ID and followupmode='House call'

select @Email=count(followupid) from ERP.FollowUpMaster 
	where datepart(month,entrydate)=datepart(month,getdate()) and datepart(year,entrydate)=datepart(year,getdate())
	--and franchiseid=2 
	and followupby=@ID and followupmode='E-mail' 
	

select @Call=count(followupmode) from ERP.FollowUpMaster 
	where datepart(month,entrydate)=datepart(month,getdate()) and datepart(year,entrydate)=datepart(year,getdate())
	--and franchiseid=2 
	and followupby=@ID and followupmode = 'call'


select @Sms=count(followupid) from ERP.FollowUpMaster 
	where datepart(month,entrydate)=datepart(month,getdate()) and datepart(year,entrydate)=datepart(year,getdate())
	--and franchiseid=2 
	and followupby=@ID and followupmode='SMS'
	if(@HouseCall != 0 or @Call != 0 or @Email != 0 or @Sms != 0)
	begin
	INSERT into ##GlobalTempTable1(
		--FranchiseId,
		Empid,
		--Enq,
		Call1 ,
		HouseCall ,
		Email ,
		Sms  
	)
		values
	(
		--@franchiseId,
		@ID,
		@Call,
		@HouseCall,
		@Email,
		@Sms
		
	)
	END
	SET @franchiseId = ''
	SET @Enq = ''
	
	SET @Sms = ''
	SET @Call = ''
	SET	@HouseCall = ''
	SET @Email = ''
	
	SET @ID = @ID + 1
	END
	select * from ##GlobalTempTable1
	
	drop table ##GlobalTempTable1


这篇关于在SQL中,如何使用包含不同值的列的Count()ID?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆