【问题标题】:How can I get values from my SQL query if the column has zero value?如果列的值为零,如何从我的 SQL 查询中获取值?
【发布时间】:2017-12-29 19:57:37
【问题描述】:

基本上我有一个训练数据集,但我希望它显示为零而不是根本不显示

下面的节目都是不完整和完整的,但我希望它显示不完整,并且来自零不完整为0的部门

这是我到目前为止所拥有的,我需要它来展示所有,我的同事试图帮助我但不得不离开,所以我问你们

Select distinct Department, Total FROM
(
Select Department, Total FROM

(
SELECT 'Incomplete' AS Status, department, count(*) as Total
FROM MyTable
WHERE CompletedTraining = 'Incomplete'
GROUP BY department
union all
Select 'Complete' AS Status, department, Count(*) as Total
FROM MyTable
WHERE CompletedTraining = ' Complete'
Group By Department
)
WHERE Status = 'Incomplete'
)
union all
SELECT DISTINCT Department, NULL AS Total
FROM MyTable

当我运行我的 python 脚本时,我得到了这个

Incomplete Training
[6, 8, 2, 3, 6, 4, 4, 5, 2, 4]

但是如果有人接受了我的培训,我希望它在列表中显示为零 所以我的预期输出是这样的

Incomplete Training
[6, 8, 2, 3, 6, 4, 4, 5, 2, 4, 0, 0]

包含多个用户的示例文档 X 1500 行

Curriculum Name     Department          Employee Name           Employee Email  Employee Status Date Assigned   Completion Date CompletedTraining
Security Training   OIS John Doe        john.doe@email.org      Active  7/18/2017 21:47 8/2/2017 21:31                          Complete
Support Training    OIS Home Simpson    home.simpson@email.gov  Active  4/20/2017 15:33 5/3/2017 22:18                          Complete
Security Training   ASD bart simpson    bart.simpson@email.gove Active  5/5/2017 20:22  11/30/2017 19:43                        incomplete
Security Training   CO  jack johnson    jack.johnson@email.gov  Active  5/9/2017 21:15  5/10/2017 20:23                         incomplete
Security Training   ECARS    jack johnson   jack.johnson@email.gov  Active  5/9/2017 21:15  5/10/2017 20:23                         incomplete
Security Training   EO  jack johnson    jack.johnson@email.gov  Active  5/9/2017 21:15  5/10/2017 20:23                         incomplete
Security Training   ISD jack johnson    jack.johnson@email.gov  Active  5/9/2017 21:15  5/10/2017 20:23                         incomplete
Security Training   MSCD    jack johnson    jack.johnson@email.gov  Active  5/9/2017 21:15  5/10/2017 20:23                         incomplete
Security Training   RD  jack johnson    jack.johnson@email.gov  Active  5/9/2017 21:15  5/10/2017 20:23                         incomplete
Security Training   TTD jack johnson    jack.johnson@email.gov  Active  5/9/2017 21:15  5/10/2017 20:23                         incomplete
Security Training   DP  jack johnson    jack.johnson@email.gov  Active  5/9/2017 21:15  5/10/2017 20:23                         incomplete
Security Training   MLD jack johnson    jack.johnson@email.gov  Active  5/9/2017 21:15  5/10/2017 20:23                         incomplete
Security Training   OIS jack johnson    jack.johnson@email.gov  Active  5/9/2017 21:15  5/10/2017 20:23                         incomplete
Security Training   TTD jack johnson    jack.johnson@email.gov  Active  5/9/2017 21:15  5/10/2017 20:23                         incomplete
Security Training   TTD jack johnson    jack.johnson@email.gov  Active  5/9/2017 21:15  5/10/2017 20:23                         incomplete
Security Training   AQPSD jack johnson  jack.johnson@email.gov  Active  5/9/2017 21:15  5/10/2017 20:23                         incomplete

【问题讨论】:

  • 你能提供样表吗?
  • 更新了,基本上需要我的查询输出所有部门,一共13个部门
  • 从这 4 行的示例数据中,您会期望 OIS 0、ASD 1、TTD1?
  • 我总共有 13 个部门,我应该在示例中编辑吗?
  • 检查我的答案是否不完整。我不确定它需要所有的工会。我会留意的。

标签: python sqlite


【解决方案1】:

这应该可以得到你不完整的#。

select distinct 
    Department
    , (select count(*) from MyTable t2 where t2.Department = t1.Department and t2.CompletedTraining='Incomplete') as Total
from MyTable t1

在同一行获得不完整和完整

select distinct 
    Department
    , (select count(*) from MyTable t2 where t2.Department = t1.Department and t2.CompletedTraining='Incomplete') as TotalIncomplete
    , (select count(*) from MyTable t2 where t2.Department = t1.Department and t2.CompletedTraining='Complete') as TotalComplete
from MyTable t1

或类似的东西

select distinct 'Incomplete' as Src
    , Department
    , (select count(*) from MyTable t2 where t2.Department = t1.Department and t2.CompletedTraining='Incomplete') as Total
from MyTable t1
union
select distinct 'Complete' as Src
    , Department
    , (select count(*) from MyTable t2 where t2.Department = t1.Department and t2.CompletedTraining='Completeomplete') as Total
from MyTable t1

【讨论】:

  • 如果可能的话我不想依赖部门名称,我会试试这个
  • 太棒了!!! ,我想我也可以用它来完成,只需更改 completedtraining='complete'?
  • 完整的培训怎么样?我尝试将“未完成”更改为“完成”,但没有成功...
  • 更新了答案,gl。
  • 嗯...,它没有为“完成”产生任何结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
  • 2021-12-23
相关资源
最近更新 更多