【问题标题】:SQL Temporary Table or SelectSQL 临时表或选择
【发布时间】:2021-11-08 17:40:34
【问题描述】:

MySQL select 语句有问题。 我有一张带有不同Department 和状态的表,每个部门有 4 个状态,但每个月并不总是每个状态,但我想在分析图中显示它有“0”。

我对 select 声明有疑问,它只显示现有状态(当然 :D )。 是否可以将所有 DepartmentsStatusesamount of statuses 设置为 0 的临时表,然后通过其他选择的值对其进行更新?

选择语句并筛选它在完美情况下的外观,以及在糟糕情况下的外观:

SELECT utd.Departament,uts.statusDef as statusoforder,Count(uts.statusDef) as Ilosc_Statusow 
FROM ur_tasks_details utd 
INNER JOIN ur_tasks_status uts on utd.StatusOfOrder = uts.statusNR 
WHERE month = 'Sierpien' 
GROUP BY uts.statusDef,utd.Departament

完美的场景,现在糟糕的场景:

我尝试过“联合”声明,但我不知道是否有可能只为每个部门采用“最高价值”。

示例:

我也听说过 使用 CTE 表,但我真的不知道如何使用它。很想得到一些提示! 感谢您的帮助。

【问题讨论】:

  • 使用外连接。
  • 你能创建 db fiddle 吗?你的预期结果是什么? db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/20
  • use text, not images/links, for text--including tables & ERDs。转述或引用其他文本。只提供您需要的东西并将其与您的问题联系起来。仅将图像用于无法表达为文本或增强文本的内容。在图片中包含图例/键和说明。
  • 请在代码问题中给出minimal reproducible example--剪切&粘贴&运行代码;具有期望和实际输出的示例输入(包括逐字错误消息);标签和版本;明确的规范和解释。对于包含最少代码的错误,您可以给出的代码是您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)对于 SQL 包括 DDL 和表格初始化代码。当你得到一个你不期望的结果时,暂停你的总体目标,切到第一个具有意外结果的子表达式并说出你的期望和原因,并通过文档证明是合理的。 How to AskHelp center

标签: mysql sql join select datatable


【解决方案1】:

使用cross join 生成所需的行。然后使用left join 和聚合来引入数据:

select d.Departament, uts.statusDef as statusoforder,
       Count(uts.statusDef) as Ilosc_Statusow
from (select distinct utd.Departament 
      from ur_tasks_details utd
     ) d cross join
     ur_tasks_status uts left join
     ur_tasks_details utd
     on utd.Departament = d.Departament and
        utd.StatusOfOrder = uts.statusNR and
        utd.month = 'Sierpien'
group by uts.statusDef, d.Departament;

第一个子查询应该是所有部门的来源。

我还怀疑month 在详细信息表中,所以它应该是on 子句的一部分。

【讨论】:

  • 嗨,我尝试了您的 select 语句,但它返回的数据与我的相同。它只返回现有的,因为它计算statusdef,但我想创建一个包含所有部门和值“0”的表,然后将它与真正的一个结合起来,然后用好的数字切换零。选择 0 而不是计数的语句:SELECT utd.Departament,uts.statusDef as statusoforder,0 as Ilosc_Statusow from ur_tasks_details utd inner join ur_tasks_status uts on utd.StatusOfOrder = uts.statusNR where month = 'Sierpien' group by uts.statusDef,utd .按部门排序
  • 选择只有几个状态和部门的语句 SELECT utd.Departament,uts.statusDef as statusoforder,Count(uts.statusDef) as Ilosc_Statusow from ur_tasks_details utd inner join ur_tasks_status uts on utd.StatusOfOrder = uts。 statusNR where month = 'Wrzesien' group by uts.statusDef,utd.Departament
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
相关资源
最近更新 更多