在SQL中,如何使用包含不同值的列的Count()ID? [英] in SQL,how to Count() ids of column containing different values ?
本文介绍了在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屋!
查看全文