首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -如何简化这个简单的查询?

SQL -如何简化这个简单的查询?
EN

Stack Overflow用户
提问于 2012-02-14 08:13:04
回答 3查看 164关注 0票数 1

我使用的是SQL Server 2005。

我如何重构这个查询?

代码语言:javascript
复制
SELECT Total, Installs, Service, tot.ls_chg_dte_ojb
  FROM (SELECT COUNT(*) [Total], ls_chg_dte_ojb
         FROM [COMPL_INST_SVC]
         GROUP BY ls_chg_dte_ojb) tot

  JOIN (SELECT COUNT(*) [Service], ls_chg_dte_ojb
         FROM [COMPL_INST_SVC]
         WHERE job_class_ojb = 'S' 
         GROUP BY ls_chg_dte_ojb) svc on svc.ls_chg_dte_ojb = tot.ls_chg_dte_ojb

  JOIN (SELECT COUNT(*) [Installs], ls_chg_dte_ojb
         FROM [COMPL_INST_SVC]
         WHERE job_class_ojb in ('C', 'R') 
         GROUP BY ls_chg_dte_ojb) ins on ins.ls_chg_dte_ojb = tot.ls_chg_dte_ojb
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-14 08:23:00

看起来Total和Service counts计算的是完全相同的东西,所以您需要修复它,但这里基本上是如何以一种更简单的方式计算计数:

代码语言:javascript
复制
SELECT
  COUNT(CASE WHEN job_class_ojb = 'S' THEN 1 END) AS [Total],
  COUNT(CASE WHEN job_class_ojb = 'S' THEN 1 END) AS [Service],
  COUNT(CASE WHEN job_class_ojb in ('C', 'R') THEN 1 END) AS [Installs]
FROM
  [COMPL_INST_SVC]
票数 2
EN

Stack Overflow用户

发布于 2012-02-14 08:16:55

您的两个子选择是相同的。忽略“Service”这一点,试着做一些类似于

代码语言:javascript
复制
SELECT 
SUM(CASE WHEN job_class_ojb = 'S' THEN 1 ELSE 0 END) as Total,
SUM(CASE WHEN job_class_ojb = 'C' or
              job_class_ojb = 'R' THEN 1 ELSE 0 END) as Installs
FROM COMPL_INST_SVC
票数 2
EN

Stack Overflow用户

发布于 2012-02-14 15:43:22

我怀疑Totals子查询不应该包括WHERE job_class_ojb = 'S'条件-如果是这样,我建议:

代码语言:javascript
复制
SELECT COUNT(*) Total,
       SUM(CASE WHEN job_class_ojb = 'S' THEN 1 ELSE 0 END) Service,
       SUM(CASE WHEN job_class_ojb in ('C','R') THEN 1 ELSE 0 END) Installs,
       ls_chg_dte_ojb
FROM COMPL_INST_SVC
GROUP BY ls_chg_dte_ojb
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9270004

复制
相关文章

相似问题

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