【问题标题】:Count Like Description column and sum based on equipmentCount Like Description 列和基于设备的总和
【发布时间】:2019-11-03 23:26:46
【问题描述】:

在 SQL Server 中,我尝试对设备进行分组,然后计算“喜欢”描述以获取出现次数。有没有人做过类似的事情?

Select 
    Equip, Count like Description, 
from
    WorkOrder (nolock) 
where 
    DateTm Between DATEADD(month, DATEDIFF(month, 0, getDate()), 0) and DATEADD(month, DATEDIFF(month, -1, getDate()), -1)
Group by 
    Equip, Description 
order by 
    Equip Asc

【问题讨论】:

  • 什么是'like'描述?示例数据和预期结果会有所帮助,并且更详细地说明您要完成的工作。
  • 描述是一个单独的列,由操作员输入文本。
  • 装备:机器 1,描述“部分被卡住”,装备:机器 1,描述“被卡住的部分”。两个运算符输入不同数据的示例。我想把这两个都算作发生。装备:机器 1 出现 2 次卡住零件。
  • 你希望输出应该像[Eq1, part was stuck, 10],[Eq1, test, 2]
  • yes 描述和出现次数

标签: sql-server count sql-like


【解决方案1】:

这应该可行。如果要使用描述列表进行搜索,请添加带有描述的 where 类。

    Select Equip,Description, count(*) as Count, 
                from WorkOrder (nolock) 
    where DateTm Between DATEADD(month, DATEDIFF(month, 0, getDate()), 0) and 
DATEADD(month, DATEDIFF(month, -1, getDate()), -1)
                Group by Equip,Description order by Equip Asc

【讨论】:

  • 这似乎很接近,但我想对“类似”相同的描述进行分组
  • 添加 where 子句。 `WHERE Description like '%part was hit%' OR description like '%Struck part%'
  • 我希望它是动态的,我不想在其中添加描述。对于不同的设备,它可能会有所不同。如果有办法做到这一点。
  • 像 '%%' 这样的描述行得通吗?如果我把它留空
  • 如果描述接近相同,我想将其计为该设备出现 2 次。如果几个词相近
【解决方案2】:

我认为您要做的是让每个 Equip 具有相同 description 的人。您可以使用group byhaving 子句来满足此要求。

select description
    , Equip
    , count(Equip) 
from WorkOrder (nolock) 
where DateTm Between dateadd(month, DATEDIFF(month, 0, getDate()), 0) 
    and dateadd(month, DATEDIFF(month, -1, getDate()), -1)
group by description, Equip 
having count(description) > 1

【讨论】:

  • 确实显示了数据,但如果描述中的单词接近,则将其视为单独出现
【解决方案3】:
WITH cte 
 AS (SELECT equip, 
            description, 
            CASE 
              WHEN description LIKE '%part was struck%' 
                    OR description LIKE '%Struck part%' THEN 'STRUCK PART' 
              WHEN description LIKE '%FAILURE%' THEN 'FAILURE' 
              ELSE 'RANDOM' 
            END AS DESCRIPTION_GROUP 
     FROM   workorder (nolock) 
     WHERE  datetm BETWEEN Dateadd(month, Datediff(month, 0, Getdate()), 0) 
                           AND 
                                   Dateadd(month, Datediff(month, -1, 
                                                  Getdate()), 
                                   -1 
                                   )) 
SELECT equip, 
       description_group, 
       Count(*) 
FROM   cte 
GROUP  BY equip, 
          description_group 
ORDER  BY equip ASC 

【讨论】:

  • 运行时出错,(生成了更新的结果集)
  • 还有其他方法吗?
  • 什么时候出现错误?您是否在数据库中执行了查询并进行了测试?
  • 是的,我在我的查询浏览器中试过了。我正在使用案例功能不起作用的其他软件
猜你喜欢
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
相关资源
最近更新 更多