首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统计唯一服务和按名称分组的SQL查询

统计唯一服务和按名称分组的SQL查询
EN

Stack Overflow用户
提问于 2012-11-10 18:07:48
回答 1查看 299关注 0票数 1

我对SQL还是个新手,我被一个查询卡住了。我有一个名为Appointment的表

代码语言:javascript
复制
NAME    SERVICE DATE
-----------------------------    
John    Abc 2012-11-10
Michael Xyz 2012-11-10
Denis   Xyz 2012-11-10
Denis   Pqr 2012-11-06
John    Abc 2012-11-06
Michael Abc 2012-11-05
Sofy    Abc 2012-11-04
John    Pqr 2012-11-01
Michael Pqr 2012-11-01
Michael Abc 2012-10-21
John    Abc 2012-10-23
John    HFD 2012-10-23
John    BHU 2012-11-09
Michael KSD 2012-11-08

我想要做的是计算在日期2012-11-012012-11-10之间为个人提供的服务。

以下是所需的输出

代码语言:javascript
复制
NAME    Abc Pqr Xyz
--------------------------------    
John    2   1   0
Michael 1   1   1
Denis   0   1   1
Sofy    1   0   0

这是我尝试过的:

代码语言:javascript
复制
SELECT  Name, COUNT(Distinct Service) 
FROM    [Appointment] 
WHERE   [DATE] between '2012-11-01 00:00:00.000' and '2012-11-10 23:59:59.999' 
AND     (Service = 'Abc' or Service = 'Pqr' or Service = 'Xyz') 
GROUP BY Name

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-10 19:26:35

代码语言:javascript
复制
SELECT Name,
       SUM(CASE WHEN Service = 'Abc' THEN 1 ELSE 0 END) Abc,
       SUM(CASE WHEN Service = 'Pqr' THEN 1 ELSE 0 END) Pqr,
       SUM(CASE WHEN Service = 'Xyz' THEN 1 ELSE 0 END) Xyz
FROM   TableName
WHERE [Date] BETWEEN CAST('2012-11-01' AS DATE) AND 
                     CAST('2012-11-10' AS DATE)
GROUP BY Name

代码语言:javascript
复制
SELECT Name, Abc, Pqr, Xyz
FROM 
  (
      SELECT [Name], [Service]
      FROM TableName
      WHERE [Date] BETWEEN CAST('2012-11-01' AS DATE) AND 
                           CAST('2012-11-10' AS DATE)
  ) p
  PIVOT
  (
      COUNT ([service])
      FOR [Service] IN ( [Abc], [Pqr], [Xyz] )
  ) AS s

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13321086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档