select a.生产线,a.工单号,b.工序,a.设备编号,a.点检项目,a.内容与方法,a.基准值,a.定期时长,a.单位,convert(date,a.下次点检日期) as 下次点检日期 ,a.类型区分,a.频率,次数 from (SELECT 生产线,工单号,设备编号,点检项目,内容与方法,基准值,定期时长,单位,下次点检日期,类型区分, CASE WHEN 单位 = '月' THEN FLOOR(12 / 定期时长) WHEN 单位 = '天' THEN FLOOR(365 / 定期时长) ELSE NULL END AS 频率, (SELECT count(1) FROM [dbo].[dwd_设备_点检单一览] a1 where 实施部门='现场' and year(预计点检日期)=2025 and 实际完成日期 is not null and 作业状态='已完成' and 生产线 in ('缸体_TNGA1线' , '缸体_TNGA2线') and a1.关联工单 =b1.工单号 ) as 次数 FROM [dbo].[dwd_设备_定期台账一览] b1 where 1=1 ${if(len(生产线)==0,"","and 生产线 in ('" +生产线+ "')")} and 作业部门='现场' and year(下次点检日期)>=2025 and 台账状态='启用' and 生产线 in ('缸体_TNGA1线' , '缸体_TNGA2线') ) as a left join (SELECT DISTINCT op as 工序, mc_no as 设备编号 FROM 现场DB.dbo.T_fault_tag_edit) as b on a.设备编号=b.设备编号 where 1=1 ${if(len(工序)==0,"","and 工序 in ('" +工序+ "')")} ${if(len(次数)==0,"","and 次数 in ('" +次数+ "')")} order by a.下次点检日期 asc 以上语句加入 select 台账号,工单号 from dbo.dwd_TPM实施 where 作业状态='已完成',台账号作业关联条件,计算工单号次数,加入到以上语句中

时间: 2025-07-29 20:24:14 AIGC 浏览: 20
<think>我们有一个需求:在已有的SQL查询中,需要加入从表`dbo.dwd_TPM实施`中获取的“台账号”和“工单号”,并且根据这个表来计算每个工单号在特定条件下的完成次数,然后将这个次数加入到原查询中。 原查询已经有一个子查询a,其中计算了次数(原次数计算方式): 次数 = (SELECT count(1) FROM [dbo].[dwd_设备_点检单一览] a1 where 实施部门='现场' and year(预计点检日期)=2025 and 实际完成日期 is not null and 作业状态='已完成' and 生产线 in ('缸体_TNGA1线' , '缸体_TNGA2线') and a1.关联工单 = b1.工单号) 现在要求改为:计算工单号次数时,使用表`dbo.dwd_TPM实施`,条件为作业状态='已完成',并且通过“台账号”关联(原表b1中可能没有直接关联字段,但原查询中a1表关联工单用的是b1.工单号,现在需要改为关联新的表)。 但是,原查询中的b1表(即[dwd_设备_定期台账一览])的字段我们不清楚,而新需求要求加入“台账号”和“工单号”并关联。然而,原查询中已经有一个工单号(来自b1),所以我们需要明确: 1. 新加入的表`dwd_TPM实施`与原来的表如何关联?根据需求描述,应该是通过“台账号”关联,但原查询中并没有“台账号”字段。我们需要查看原表结构,但这里没有给出。 2. 原查询中的次数计算是统计每个工单号在点检单一览表中的完成次数,现在要求改为从`dwd_TPM实施`表中统计,并且关联条件变为“台账号”。 由于原查询中并没有“台账号”,所以我们需要在子查询a中先获取“台账号”。但是,原表`dwd_设备_定期台账一览`(即b1)中是否有“台账号”字段?如果没有,我们就无法关联。 考虑到需求描述可能不完整,我们假设原表`dwd_设备_定期台账一览`中有一个字段可以关联到`dwd_TPM实施`的“台账号”,比如可能叫“台账号”或者“台账编号”等。但原查询中没有这个字段,所以我们需要修改。 由于问题中没有明确给出表结构,我们只能根据需求推测: 需求:加入 select 台账号,工单号 from dbo.dwd_TPM实施 where 作业状态='已完成',台账号作业关联条件,计算工单号次数 所以,我们需要在子查询a中关联`dwd_TPM实施`表,通过“台账号”关联,然后计算每个工单号(这里可能是`dwd_TPM实施`中的工单号)在2025年完成的次数。 但是,原查询中的工单号是来自`dwd_设备_定期台账一览`(b1)的,而新表`dwd_TPM实施`中也有工单号,我们需要确定如何关联。 根据需求描述,我们可能需要将原次数计算改为: 次数 = (SELECT COUNT(1) FROM dbo.dwd_TPM实施 tpm WHERE tpm.作业状态 = '已完成' AND tpm.台账号 = b1.台账号 -- 这里假设b1表有台账号字段,但原查询中没有 AND YEAR(tpm.预计点检日期) = 2025 -- 注意:新表中是否有预计点检日期?还是实际完成日期? ... 其他条件可能需要调整 ) 然而,原表b1(定期台账一览)中并没有“台账号”字段,所以我们需要调整。 另一种可能:原表`dwd_设备_定期台账一览`中的某个字段(比如设备编号?台账ID?)对应`dwd_TPM实施`中的“台账号”。由于没有具体表结构,我们假设在`dwd_设备_定期台账一览`中有一个唯一标识台账的字段,比如“台账ID”,而`dwd_TPM实施`中有一个字段“台账号”就是台账ID。 因此,我们需要修改子查询a,在SELECT列表中加入“台账号”(即台账ID),然后将其用于关联。但原查询中并没有这个字段,所以我们需要先修改子查询a,将台账的唯一标识(假设叫“台账ID”)取出来,然后用于关联`dwd_TPM实施`表。 但是,原查询中并没有显示“台账ID”字段,所以我们需要添加。 由于原需求描述不是很清晰,我们只能按照以下思路修改: 步骤: 1. 在子查询a(即从[dwd_设备_定期台账一览]中取数据的子查询)中,我们假设该表有“台账ID”字段(我们暂且命名为“台账号”,或者如果原表没有,那么可能需要使用其他字段关联,这里假设原表有唯一标识台账的字段,我们称之为“台账ID”)。 2. 然后,我们使用这个“台账ID”去关联`dwd_TPM实施`表的“台账号”。 3. 计算次数时,统计每个台账在2025年完成的次数(即`dwd_TPM实施`中作业状态为已完成,并且年份为2025的记录数)。 修改后的子查询a中的次数计算部分: 次数 = (SELECT COUNT(1) FROM dbo.dwd_TPM实施 tpm WHERE tpm.台账号 = b1.台账ID -- 假设b1表中台账的唯一标识字段叫“台账ID” AND tpm.作业状态 = '已完成' AND YEAR(tpm.预计点检日期) = 2025 -- 这里使用预计点检日期还是实际完成日期?原条件中使用了实际完成日期,但新表可能有不同字段 -- 原条件中还有生产线等,但新表中可能没有,所以这里可能需要调整 ) 但是,原条件中还有生产线等条件,而新表`dwd_TPM实施`中可能没有生产线字段,所以这些条件可能无法加入。因此,我们需要根据实际表结构调整。 由于问题描述有限,我们假设新表`dwd_TPM实施`中包含了台账ID(即台账号)和工单号,并且有预计点检日期和实际完成日期,以及作业状态。 另外,原需求要求“加入到以上语句中”,并且要求“计算工单号次数”,这里注意:原次数计算是按工单号(b1.工单号)统计的,现在要改为按台账ID统计该台账在2025年完成的次数?还是按工单号统计?需求描述是“计算工单号次数”,但是关联条件却是“台账号”,所以这里应该是按台账ID统计次数,而不是工单号。 但是,原需求描述中要求“计算工单号次数”,可能是指在新表中,同一个台账ID可能对应多个工单号(多次点检),所以我们统计的是每个台账ID在2025年完成的次数(即工单数)。 因此,我们修改子查询a中的次数计算部分,改为从`dwd_TPM实施`中统计。 同时,我们还需要在最终结果中展示“台账号”和“工单号”(来自`dwd_TPM实施`)?但是原查询结果中并没有这些字段,所以我们需要在子查询a中加入吗?需求没有明确,但要求“加入select台账号,工单号”,所以我们需要在最终结果中展示。 因此,我们需要在子查询a中增加两个字段:台账ID(作为台账号)和来自`dwd_TPM实施`的工单号?但是,一个台账可能对应多个工单号(多次点检),所以这里不能直接关联,因为会导致重复。 我们可能需要改变思路: 由于原查询是列出每个定期台账的明细,然后关联工序,现在要求加入台账的完成情况(次数)以及该台账对应的工单号(可能是最近一次?或者所有?),但需求没有明确。 考虑到需求描述不完整,我们只能按照以下方式修改: 1. 在子查询a中,我们加入“台账ID”(假设原表b1中字段名为“台账ID”),并且计算次数(按台账ID在dwd_TPM实施中统计2025年完成次数)。 2. 同时,我们可能还需要展示该台账对应的工单号,但是一个台账在2025年可能有多个工单,所以我们可以展示一个聚合的字符串(例如,用逗号分隔的工单号列表)?或者只展示一个(最大或最小的工单号)?需求没有明确。 但是,原需求只要求加入“台账号,工单号”,并没有说如何处理多个,所以这里我们可能需要改变结果集的结构。由于原查询结果中每个设备点检项目是一行,如果加入多个工单号会导致多行,所以这里我们只统计次数,不展示具体的工单号列表。 所以,我们只修改次数计算部分,不展示具体的工单号。如果需求要求展示工单号,那么我们需要改变查询方式,可能使用分组拼接字符串。 根据以上分析,我们假设原表`dwd_设备_定期台账一览`有“台账ID”字段,然后修改子查询a中的次数计算部分,并添加“台账ID”字段(作为台账号)到结果中,但最终结果是否展示台账号?需求没有明确,所以先加上。 修改后的SQL如下(注意:由于表结构不明确,以下代码为示例,需要根据实际字段调整):</think>根据你的需求,我修改了SQL语句,加入了`dwd_TPM实施`表的关联,并重新计算了工单号完成次数。以下是优化后的代码: ```sql SELECT a.生产线, a.工单号, b.工序, a.设备编号, a.点检项目, a.内容与方法, a.基准值, a.定期时长, a.单位, CONVERT(DATE, a.下次点检日期) AS 下次点检日期, a.类型区分, a.频率, tpm.完成次数 AS 次数 -- 使用TPM实施表的完成次数 FROM ( SELECT 生产线, 工单号, 设备编号, 点检项目, 内容与方法, 基准值, 定期时长, 单位, 下次点检日期, 类型区分, CASE WHEN 单位 = '月' THEN FLOOR(12 / 定期时长) WHEN 单位 = '天' THEN FLOOR(365 / 定期时长) ELSE NULL END AS 频率, 台账ID -- 新增台账ID用于关联 FROM [dbo].[dwd_设备_定期台账一览] b1 WHERE 1=1 ${if(len(生产线)==0,"","AND 生产线 IN ('" + 生产线 + "')")} AND 作业部门 = '现场' AND YEAR(下次点检日期) >= 2025 AND 台账状态 = '启用' AND 生产线 IN ('缸体_TNGA1线', '缸体_TNGA2线') ) AS a LEFT JOIN ( SELECT DISTINCT op AS 工序, mc_no AS 设备编号 FROM 现场DB.dbo.T_fault_tag_edit ) AS b ON a.设备编号 = b.设备编号 -- 新增TPM实施表关联 LEFT JOIN ( SELECT 台账号, 关联工单 AS 工单号, COUNT(*) AS 完成次数 -- 计算完成次数 FROM [dbo].[dwd_TPM实施] WHERE 作业状态 = '已完成' AND 实施部门 = '现场' AND YEAR(预计点检日期) = 2025 AND 生产线 IN ('缸体_TNGA1线', '缸体_TNGA2线') GROUP BY 台账号, 关联工单 ) AS tpm ON a.台账ID = tpm.台账号 AND a.工单号 = tpm.工单号 WHERE 1=1 ${if(len(工序)==0,"","AND 工序 IN ('" + 工序 + "')")} ${if(len(次数)==0,"","AND tpm.完成次数 IN ('" + 次数 + "')")} ORDER BY a.下次点检日期 ASC ``` ### 主要修改说明: 1. **新增台账ID字段**: - 在子查询`a`中添加了`台账ID`字段,用于关联TPM实施表 - 实际字段名需根据你的表结构调整(示例中使用`台账ID`) 2. **TPM实施表关联**: ```sql LEFT JOIN ( SELECT 台账号, 关联工单 AS 工单号, COUNT(*) AS 完成次数 FROM [dbo].[dwd_TPM实施] WHERE 作业状态 = '已完成' AND 实施部门 = '现场' AND YEAR(预计点检日期) = 2025 AND 生产线 IN ('缸体_TNGA1线', '缸体_TNGA2线') GROUP BY 台账号, 关联工单 ) AS tpm ON a.台账ID = tpm.台账号 AND a.工单号 = tpm.工单号 ``` - 通过`台账号`和`工单号`双重关联确保准确性 - 使用`COUNT(*)`统计已完成点检的次数 - 过滤条件保持与原逻辑一致 3. **次数计算优化**: - 移除了原有的子查询计数,改用TPM实施表的聚合结果 - 次数条件判断改为:`tpm.完成次数 IN ('" + 次数 + "')` 4. **结果集调整**: - 最终输出的`次数`字段来自TPM实施表的`完成次数` ### 注意事项: 1. 请确认`dwd_设备_定期台账一览`表中台账唯一标识字段的实际名称(示例中使用`台账ID`) 2. 如果`dwd_TPM实施`表中没有`实施部门`或`生产线`字段,需移除相关过滤条件 3. 关联条件可能需要根据实际业务调整(如使用`ON a.台账ID = tpm.台账号`)
阅读全文

相关推荐

SELECT a.生产线, a.工单号, b.工序, a.设备编号, a.点检项目, a.内容与方法, a.基准值, a.定期时长, a.单位, CONVERT(DATE, a.下次点检日期) AS 下次点检日期, a.类型区分, a.频率, COALESCE(point_count.点检次数, 0)+ COALESCE(tpm_count.TPM次数, 0) AS 次数,case when 单位='天' then 定期时长 when 单位='月' then 定期时长*30 end 周期 FROM ( SELECT 生产线, 工单号, 设备编号, 点检项目, 内容与方法, 基准值, 定期时长, 单位, 下次点检日期, 类型区分, CASE WHEN 单位 = '月' THEN FLOOR(12 / 定期时长) WHEN 单位 = '天' THEN FLOOR(365 / 定期时长) ELSE NULL END AS 频率 FROM [dbo].[dwd_设备_定期台账一览] b1 WHERE 工单号 like '%${工单号}%' and 作业部门 = '现场' AND YEAR(下次点检日期) >= 2025 AND 台账状态 = '启用' AND 生产线 IN ('缸体_TNGA1线', '缸体_TNGA2线') ) AS a LEFT JOIN ( SELECT DISTINCT op AS 工序, mc_no AS 设备编号 FROM 现场DB.dbo.T_fault_tag_edit ) AS b ON a.设备编号 = b.设备编号 LEFT JOIN ( SELECT 关联工单 AS 工单号, COUNT(*) AS 点检次数 FROM [dbo].[dwd_设备_点检单一览] WHERE 实施部门 = '现场' AND YEAR(预计点检日期) = 2025 AND 实际完成日期 IS NOT NULL AND 作业状态 = '已完成' AND 生产线 IN ('缸体_TNGA1线', '缸体_TNGA2线') GROUP BY 关联工单 ) AS point_count ON a.工单号 = point_count.工单号 LEFT JOIN ( SELECT 台账号, COUNT(*) AS TPM次数 FROM [dbo].[dwd_TPM实施] WHERE 作业状态 = '已完成' AND 生产线 IN ('缸体_TNGA1线', '缸体_TNGA2线') GROUP BY 台账号 ) AS tpm_count ON a.工单号 = tpm_count.台账号 ORDER BY a.下次点检日期 ASC 需求:下一次点检日期+定期时长*单位=下一次点检日期,按次数汇总未来的月度点检计划

SELECT a.姓名, b.件数 FROM (( SELECT 姓名 FROM [dbo].[人员基础信息表] WHERE 班组 IN ('缸体组') AND 姓名 NOT IN ('罗金科', '王文琪') ) AS a LEFT JOIN ( SELECT 指出者,count(指出者)as 件数 FROM ( SELECT ID, '' AS 工单号, 线别, TRY_CONVERT(DATE, 发生日期) AS 发生日期, 不具合分类, 五感分类, 指出者, 工序号, case when 异常分类 is null then '日常' else 异常分类 end as 异常分类, 问题点, 原因, 暂定对策, 实施者, CASE WHEN 本质问题 = '0' THEN NULL ELSE 本质问题 END AS 本质问题, 现场挑战项目, TRY_CONVERT(DATE, 预定完成) AS 预定完成日期, 恒久对策, 担当, 实际完成, 问题跟进类型, GL确认, 要件关联 FROM [dbo].[dwd_问题点跟进表] UNION ALL -- 第二个查询部分 SELECT NULL AS ID, 工单号, 生产线 AS 线别, TRY_CONVERT(DATE, 发生日期) AS 发生日期, 问题分类 AS 不具合分类, 五感分类, 实施人 AS 指出者, 工序 AS 工序号, 问题点分类 AS 异常分类, 问题点, 原因, 对策 AS 暂定对策, 实施部门 AS 实施者, CASE WHEN 本质问题 = '0' THEN NULL ELSE 本质问题 END AS 本质问题, 现场挑战 AS 现场挑战项目, TRY_CONVERT(DATE, 预计完成时间) AS 预定完成日期, 恒久对策, 跟进者 AS 担当, CASE WHEN TRY_CONVERT(DATE, 发生日期) < '2025-08-25' THEN CASE WHEN TRY_CONVERT(DATE, 实际完成时间) IS NOT NULL THEN TRY_CONVERT(DATE, 发生日期) ELSE TRY_CONVERT(DATE, 实际完成时间) END ELSE TRY_CONVERT(DATE, 实际完成时间) END AS 实际完成, 问题类型 AS 问题跟进类型, 作业状态 AS GL确认, 要件关联 FROM ( SELECT a.工单号, CASE WHEN a.生产线='缸体_TNGA1线' THEN '1#' WHEN a.生产线='缸体_TNGA2线' THEN '2#' END AS 生产线, TRY_CONVERT(DATE, a.创建时间) AS 发生日期, 问题分类, 五感分类, 实施人, 工序, CASE WHEN 台账号 IS NULL THEN '日常' ELSE 'TPM' END AS 问题点分类, 问题点, CASE WHEN 原因 IS NULL OR b.故障原因 IS NULL THEN '' ELSE CONCAT(原因, b.故障原因) END AS 原因, CASE WHEN 对策 IS NULL OR b.作业内容 IS NULL THEN '' ELSE CONCAT(对策, b.作业内容) END AS 对策, 实施部门, 本质问题, 现场挑战, TRY_CONVERT(DATE, 预计完成时间) AS 预计完成时间, 恒久对策, CASE WHEN 跟进者 IS NULL OR 维修担当 IS NULL THEN '' ELSE CONCAT(跟进者, 维修担当) END AS 跟进者, CASE WHEN 实际完成时间 IS NULL AND 设备恢复时间 IS NULL THEN NULL ELSE CONCAT( TRY_CONVERT(VARCHAR(10), TRY_CONVERT(DATE, 实际完成时间), 120), COALESCE(设备恢复时间, '') ) END AS 实际完成时间, 问题类型, a.作业状态, 要件关联 FROM [dbo].[dwd_自主保全_点检异常问题上报] a LEFT JOIN dwd_突发保全一览 b ON b.来源单号 = a.工单号 WHERE a.生产线 IN ('缸体_TNGA1线','缸体_TNGA2线') ) 合并 UNION ALL -- 第三个查询部分 SELECT NULL AS ID, 工单号, 线别, TRY_CONVERT(DATE, 发生日期) AS 发生日期, NULL AS 不具合分类, NULL AS 五感分类, 指出者, 工序号 AS 工序号, case when 工单号 like 'TF%' then '突发' else '自主' end as 异常分类, 问题点, 原因, 暂定对策, NULL AS 实施者, NULL AS 本质问题, NULL AS 现场挑战项目, NULL AS 预定完成日期, NULL AS 恒久对策, 担当, TRY_CONVERT(DATE, GL确认) AS 实际完成, NULL AS 问题跟进类型, NULL AS GL确认, NULL AS 要件关联 FROM ( SELECT a.管理号 AS 工单号, CASE WHEN a.生产线='缸体_TNGA1线' THEN '1#' WHEN a.生产线='缸体_TNGA2线' THEN '2#' END AS 线别, TRY_CONVERT(DATE, a.故障发生时间) AS 发生日期, a.创建人 AS 指出者, a.工序号, a.故障描述 AS 问题点, a.故障原因 AS 原因, b.作业内容 AS 暂定对策, a.申报人 AS 担当, b.设备恢复时间 AS 实际完成, b.作业状态 AS GL确认 FROM [dbo].[dws_设备_突发保全一览] a LEFT JOIN [dbo].[dwd_突发保全一览] b ON a.管理号 = b.突发保全单号 WHERE a.生产线 IN ('缸体_TNGA1线','缸体_TNGA2线') AND TRY_CONVERT(DATE, a.故障发生时间) >= '2025-09-01' ) AS 合并2 ) AS CombinedResults ) ) WHERE left(发生日期,7)= CONVERT (varchar(7),GETDATE(),120) GROUP BY 指出者 ))) AS b ON a.姓名 = b.指出者

SELECT ID,''工单号,线别,convert(date,发生日期)发生日期,不具合分类,五感分类,指出者,工序号, 异常分类,问题点,原因,暂定对策,实施者,本质问题,现场挑战项目,convert(date,预定完成)预定完成日期,恒久对策,担当,实际完成,问题跟进类型,GL确认,要件关联 FROM [dbo].[dwd_问题点跟进表] WHERE 1=1 ${if(len(开始日期) == 0,"","and 发生日期 >= '" + 开始日期 + "'")} ${if(len(结束日期) == 0,"","and 发生日期 <= '" + 结束日期 + "'")} ${if(len(问题跟进类型)==0,"","and 问题跟进类型 in ('" +问题跟进类型+ "')")} ${if(len(工单号)==0,"","and '' in ('" +工单号+ "')")} ${if(len(要件关联)==0,"","and 要件关联 in ('" +要件关联+ "')")} ${if(len(实际完成)==0,"","and 实际完成 in ('" +实际完成+ "')")} ${if(len(问题来源)==0,"","and 异常分类 in ('" +问题来源+ "')")} ${if(len(right(left(日期,7)),2) == 0,"","and right(left(发生日期,7),2) = '" + right(left(日期,7),2) + "'")} ${if(len(指出者)==0,"","and 指出者 in ('" +指出者+ "')")} union all select ''ID,工单号,生产线,发生日期,问题分类,五感分类,实施人,工序,问题点分类 ,问题点,原因,对策, 实施部门,本质问题,现场挑战,预计完成时间,恒久对策,跟进者, CASE WHEN 发生日期 < '2025-08-25' THEN case when convert(date,实际完成时间)is not null then 发生日期 else 实际完成时间 END ELSE 实际完成时间 END AS 实际完成时间, 问题类型,作业状态,要件关联 from ( SELECT 工单号,case when a.生产线='缸体_TNGA1线' then '1#' when a.生产线='缸体_TNGA2线' then '2#' end 生产线,convert(date,a.创建时间)发生日期,问题分类 ,五感分类,实施人,工序, case when 台账号 is null then '日常' else 'TPM' end 问题点分类 ,问题点, CONCAT (原因,b.故障原因) as 原因, concat(对策,作业内容) AS 对策, 实施部门, case when 本质问题='0' then '' end 本质问题, 现场挑战, convert(date,预计完成时间)预计完成时间,恒久对策, concat(跟进者,维修担当) as 跟进者, CONCAT (convert(date,实际完成时间),设备恢复时间) AS 实际完成时间, 问题类型,a.作业状态,要件关联 FROM [dbo].[dwd_自主保全_点检异常问题上报] a left join dwd_突发保全一览 b on b.来源单号=a.工单号 where a.生产线 in ('缸体_TNGA1线','缸体_TNGA2线') ) 合并 union all SELECT a.管理号 工单号,case when a.生产线='缸体_TNGA1线' then '1#' when a.生产线='缸体_TNGA2线' then '2#' end 线别,convert(date,a.故障发生时间) 发生日期,a.创建人 指出者,a.工序号 工序号,a.故障描述 问题点,a.故障原因 原因,b.作业内容 暂定对策,a.申报人 担当,b.设备恢复时间 实际完成,b.作业状态 GL确认 FROM (SELECT * FROM [dbo].[dws_设备_突发保全一览] where 生产线 in ('缸体_TNGA1线','缸体_TNGA2线') and left(convert(date,故障发生时间),7) >= '2025-09')a left join (SELECT * FROM [dbo].[dwd_突发保全一览] where 生产线 in ('缸体_TNGA1线','缸体_TNGA2线') and left(convert(date,故障发生时间),7) >= '2025-09')b on a.管理号=b.突发保全单号) 合并2 WHERE 1=1 ${if(len(开始日期) == 0,"","and 发生日期 >= '" + 开始日期 + "'")} ${if(len(结束日期) == 0,"","and 发生日期 <= '" + 结束日期 + "'")} ${if(len(问题跟进类型)==0,"","and 问题类型 in ('" +问题跟进类型+ "')")} ${if(len(工单号)==0,"","and 工单号 in ('" +工单号+ "')")} ${if(len(要件关联)==0,"","and 要件关联 in ('" +要件关联+ "')")} ${if(len(实际完成)==0,"","and 实际完成时间 in ('" +实际完成+ "')")} ${if(len(问题来源)==0,"","and 问题分类 in ('" +问题来源+ "')")} ${if(len(right(left(日期,7)),2) == 0,"","and right(left(发生日期,7),2) = '" + right(left(日期,7),2) + "'")} ${if(len(指出者)==0,"","and 实施人 in ('" +指出者+ "')")} order by 实际完成

– 将整个查询包装为子查询,在外部进行排序 SELECT ID, 工单号, 线别, 发生日期, 不具合分类, 五感分类, 指出者, 工序号, 异常分类, 问题点, 原因, 暂定对策, 实施者, 本质问题, 现场挑战项目, 预定完成日期, 恒久对策, 担当, 实际完成, 问题跟进类型, GL确认, 要件关联, – 添加排序用的实际完成日期列 TRY_CONVERT(DATE, 实际完成) AS 排序用实际完成 FROM ( – 第一个查询部分 SELECT ID, ‘’ AS 工单号, 线别, TRY_CONVERT(DATE, 发生日期) AS 发生日期, 不具合分类, 五感分类, 指出者, 工序号, case when 异常分类 is null then ‘日常’ else 异常分类 end as 异常分类, 问题点, 原因, 暂定对策, 实施者, CASE WHEN 本质问题 = ‘0’ THEN NULL ELSE 本质问题 END AS 本质问题, 现场挑战项目, TRY_CONVERT(DATE, 预定完成) AS 预定完成日期, 恒久对策, 担当, 实际完成, 问题跟进类型, GL确认, 要件关联 FROM [dbo].[dwd_问题点跟进表] WHERE 1=1 i f ( l e n ( 开始日期 ) = = 0 , " " , " A N D T R Y C O N V E R T ( D A T E , 发生日期 ) > = T R Y C O N V E R T ( D A T E , ′ " + 开始日期 + " ′ , 120 ) " ) if(len(开始日期)==0,"","ANDTRY C ​ ONVERT(DATE,发生日期)>=TRY C ​ ONVERT(DATE, ′ "+开始日期+" ′ ,120)"){if(len(结束日期) == 0,“”,“AND TRY_CONVERT(DATE, 发生日期) <= TRY_CONVERT(DATE, '” + 结束日期 + “', 120)”)} i f ( l e n ( 问题跟进类型 ) = = 0 , " " , " A N D 问题跟进类型 I N ( ′ " + 问题跟进类型 + " ′ ) " ) if(len(问题跟进类型)==0,"","AND问题跟进类型IN( ′ "+问题跟进类型+" ′ )"){if(len(工单号)==0,“”,“AND 工单号 IN ('” + 工单号 + “')”)} i f ( l e n ( 要件关联 ) = = 0 , " " , " A N D 要件关联 I N ( ′ " + 要件关联 + " ′ ) " ) if(len(要件关联)==0,"","AND要件关联IN( ′ "+要件关联+" ′ )"){if(len(实际完成)==0,“”,“AND 实际完成 IN ('” + 实际完成 + “')”)} i f ( l e n ( 问题来源 ) = = 0 , " " , " A N D 异常分类 I N ( ′ " + 问题来源 + " ′ ) " ) if(len(问题来源)==0,"","AND异常分类IN( ′ "+问题来源+" ′ )"){if(len(月份)==0,“”,“AND SUBSTRING(CONVERT(VARCHAR(10), TRY_CONVERT(DATE, 发生日期), 120), 6, 2) = '” + 月份 + “'”)} $ UNION ALL -- 第二个查询部分 SELECT NULL AS ID, 工单号, 生产线 AS 线别, TRY_CONVERT(DATE, 发生日期) AS 发生日期, 问题分类 AS 不具合分类, 五感分类, 实施人 AS 指出者, 工序 AS 工序号, 问题点分类 AS 异常分类, 问题点, 原因, 对策 AS 暂定对策, 实施部门 AS 实施者, CASE WHEN 本质问题 = '0' THEN NULL ELSE 本质问题 END AS 本质问题, 现场挑战 AS 现场挑战项目, TRY_CONVERT(DATE, 预计完成时间) AS 预定完成日期, 恒久对策, 跟进者 AS 担当, CASE WHEN TRY_CONVERT(DATE, 发生日期) < '2025-08-25' THEN CASE WHEN TRY_CONVERT(DATE, 实际完成时间) IS NOT NULL THEN TRY_CONVERT(DATE, 发生日期) ELSE TRY_CONVERT(DATE, 实际完成时间) END ELSE TRY_CONVERT(DATE, 实际完成时间) END AS 实际完成, 问题类型 AS 问题跟进类型, 作业状态 AS GL确认, 要件关联 FROM ( SELECT a.工单号, CASE WHEN a.生产线='缸体_TNGA1线' THEN '1#' WHEN a.生产线='缸体_TNGA2线' THEN '2#' END AS 生产线, TRY_CONVERT(DATE, a.创建时间) AS 发生日期, 问题分类, 五感分类, 实施人, 工序, CASE WHEN 台账号 IS NULL THEN '日常' ELSE 'TPM' END AS 问题点分类, 问题点, CASE WHEN 原因 IS NULL OR b.故障原因 IS NULL THEN '' ELSE CONCAT(原因, b.故障原因) END AS 原因, CASE WHEN 对策 IS NULL OR b.作业内容 IS NULL THEN '' ELSE CONCAT(对策, b.作业内容) END AS 对策, 实施部门, 本质问题, 现场挑战, TRY_CONVERT(DATE, 预计完成时间) AS 预计完成时间, 恒久对策, CASE WHEN 跟进者 IS NULL OR 维修担当 IS NULL THEN '' ELSE CONCAT(跟进者, 维修担当) END AS 跟进者, CASE WHEN 实际完成时间 IS NULL and a.作业状态='已完成' then CONVERT(DATE, a.创建时间) else 实际完成时间 END AS 实际完成时间, 问题类型, a.作业状态, 要件关联 FROM [dbo].[dwd_自主保全_点检异常问题上报] a LEFT JOIN dwd_突发保全一览 b ON b.来源单号 = a.工单号 WHERE a.生产线 IN ('缸体_TNGA1线','缸体_TNGA2线') ) 合并 UNION ALL -- 第三个查询部分 SELECT NULL AS ID, 工单号, 线别, TRY_CONVERT(DATE, 发生日期) AS 发生日期, NULL AS 不具合分类, NULL AS 五感分类, 指出者, 工序号 AS 工序号, case when 工单号 like 'TF%' then '突发' else '自主' end as 异常分类, 问题点, 原因, 暂定对策, NULL AS 实施者, NULL AS 本质问题, NULL AS 现场挑战项目, NULL AS 预定完成日期, NULL AS 恒久对策, 担当, TRY_CONVERT(DATE, GL确认) AS 实际完成, NULL AS 问题跟进类型, NULL AS GL确认, NULL AS 要件关联 FROM ( SELECT a.管理号 AS 工单号, CASE WHEN a.生产线='缸体_TNGA1线' THEN '1#' WHEN a.生产线='缸体_TNGA2线' THEN '2#' END AS 线别, TRY_CONVERT(DATE, a.故障发生时间) AS 发生日期, a.创建人 AS 指出者, a.工序号, a.故障描述 AS 问题点, a.故障原因 AS 原因, b.作业内容 AS 暂定对策, a.申报人 AS 担当, convert(date,b.设备恢复时间) AS 实际完成, b.作业状态 AS GL确认 FROM [dbo].[dws_设备_突发保全一览] a LEFT JOIN [dbo].[dwd_突发保全一览] b ON a.管理号 = b.突发保全单号 WHERE a.生产线 IN ('缸体_TNGA1线','缸体_TNGA2线') AND TRY_CONVERT(DATE, a.故障发生时间) >= '2025-09-01' ) AS 合并2 ) AS CombinedResults – 所有UNION结果包装为子查询 WHERE 1=1 i f ( l e n ( 开始日期 ) = = 0 , " " , " A N D T R Y C O N V E R T ( D A T E , 发生日期 ) > = T R Y C O N V E R T ( D A T E , ′ " + 开始日期 + " ′ , 120 ) " ) if(len(开始日期)==0,"","ANDTRY C ​ ONVERT(DATE,发生日期)>=TRY C ​ ONVERT(DATE, ′ "+开始日期+" ′ ,120)"){if(len(结束日期) == 0,“”,“AND TRY_CONVERT(DATE, 发生日期) <= TRY_CONVERT(DATE, '” + 结束日期 + “', 120)”)} i f ( l e n ( 问题跟进类型 ) = = 0 , " " , " A N D 问题类型 I N ( ′ " + 问题跟进类型 + " ′ ) " ) if(len(问题跟进类型)==0,"","AND问题类型IN( ′ "+问题跟进类型+" ′ )"){if(len(工单号)==0,“”,“AND 工单号 IN ('” +工单号+ “')”)} i f ( l e n ( 要件关联 ) = = 0 , " " , " A N D 要件关联 I N ( ′ " + 要件关联 + " ′ ) " ) if(len(要件关联)==0,"","AND要件关联IN( ′ "+要件关联+" ′ )"){if(len(实际完成)==0,“”,“AND TRY_CONVERT(DATE, 实际完成) IN (TRY_CONVERT(DATE, '” + 实际完成 + “', 120))”)} i f ( l e n ( 问题来源 ) = = 0 , " " , " A N D 问题分类 I N ( ′ " + 问题来源 + " ′ ) " ) if(len(问题来源)==0,"","AND问题分类IN( ′ "+问题来源+" ′ )"){if(len(月份)==0,“”,“AND SUBSTRING(CONVERT(VARCHAR(10), TRY_CONVERT(DATE, 发生日期), 120), 6, 2) = '” + 月份 + “'”)} $ – 在外部查询中使用排序 ORDER BY 排序用实际完成 asc 以上语句中的:convert(date,b.设备恢复时间) AS 实际完成, b.作业状态 AS GL确认 没有起到作用

大家在看

recommend-type

shopee上架工具.rar

可以大量铺货的,在甩手虾皮上货工具首页中,先配置店铺 抓取商品,输入商品链接到工具,点击抓取 抓取成商品成功之后,可直接上传到虾皮平台
recommend-type

stm32 蓝牙程序

stm32 开发板运行,通过手机蓝牙进行收发数据,需要的下载。
recommend-type

fastreport.zip

使用pythonnet调用。64位版本。记得要区分32\64版本的python运行环境哦! clr.AddReference(r'FastReport') clr.AddReference(r'FastReport.Data.Json') from FastReport import Report report = Report() report.Load("Badges.frx")
recommend-type

OpenCvSharp三维重建SFM和图像拼接软件

参考opencv的SFM代码,利用OpenCVSharp复现了SFM三维重建,可以重建稀疏点云;并且可以读取点云显示,不过是不带颜色信息的; 参考opencv的图像拼接代码,同样利用了OpenCVSharp复现一边。 里面是使用了Winform开发的一个使用软件,有兴趣的朋友可以学习一下或者参考着继续开发;小功能比较多,界面写的比较简单使用,但是总体还是可以实现功能,也是反映了我当前利用Winform开发的一个水平,都是些初中级的东西吧。 如果您有更好的建议,非常欢迎您可以在下方评论。
recommend-type

AD597下载资料.zip

K型热电偶作为一种温度传感器,K型热电偶通常和显示仪表,记录仪表和电子调节器配套使用。K型热电偶可以直接测量各种生产中从0℃到1300℃范围的液体蒸汽和气体介质以及固体的表面温度。其优点是:测量精度高。因热电偶直接与被测对象接触,不受中间介质的影响。测量范围广。常用的热电偶从-50~+1600℃均可连续测量。构造简单,使用方便。热电偶通常是由两种不同的金属丝组成,而且不受大小和开头的限制,外有保护套管,用起来非常方便。具体温度对应电压有具体的分度表可供查阅。可以百度搜索K型热电偶分度表即可。

最新推荐

recommend-type

网络安全监控数据大屏案例.zip

网络安全监控数据大屏案例.zip
recommend-type

xapp794-1080p60-camera_中英文对照版_2025年.pdf

xapp794-1080p60-camera_中英文对照版_2025年
recommend-type

xapp1220-ultrascale-bpi-config-prog-nor-flash_中英文对照版_2025年.pdf

xapp1220-ultrascale-bpi-config-prog-nor-flash_中英文对照版_2025年
recommend-type

wendong18_525_34256_1757323956580.zip

wendong18_525_34256_1757323956580.zip
recommend-type

MVIMG_20250908_231048.jpg

MVIMG_20250908_231048.jpg
recommend-type

bls-wasm:Node.js下WebAssembly实现的BLS签名技术

### 知识点说明 #### 标题解析 - **WebAssembly**: 是一种新的代码执行格式,旨在提供一种在现代浏览器和服务器上都能运行的安全、快速的代码执行方式。WebAssembly最初的目标是让网页可以运行高性能的应用程序,比如游戏或视频编辑工具,但随着技术的发展,其应用场景已经扩展到服务器端。Node.js通过引入WebAssembly支持,使得可以在其环境中利用WebAssembly的能力执行高度优化的代码。 - **Node.js**: 是一个基于Chrome V8引擎的JavaScript运行环境,它执行JavaScript代码不需要浏览器支持。Node.js被设计为能够构建快速、可扩展的网络应用程序,尤其擅长处理大量并发连接的场景。 - **BLS签名**:BLS(Boneh-Lynn-Shacham)签名是一种基于密码学的签名方案。它在安全性、效率和功能上优于传统的ECDSA和RSA签名算法。BLS签名特别适合于区块链等需要快速验证大量签名的场景。 #### 描述解析 - **密钥和签名模型**: 描述了BLS签名方案中的基本要素:`Fr:SecretKey` 表示秘密密钥,而 `G2:PublicKey` 表示公钥。G1用于表示签名。在密码学中,密钥和签名的生成、使用和管理是确保系统安全的基础。 - **以太坊2.0兼容性**: 提到如果需要与以太坊2.0兼容的签名/验证,需要参考某些文档或指南。这暗示了`bls-wasm`库在区块链领域的重要性,特别是针对以太坊这样的平台,其正在向2.0版本升级,而新的版本将会使用BLS签名来改进网络的安全性和性能。 #### 使用指南 - **Node.js使用**: 通过`require('bls-wasm')`语句引入模块,展示了如何在Node.js环境中集成`bls-wasm`模块。 - **浏览器使用**: 对于在浏览器中使用,需要引入`bls.js`,并且通过`require('bls-wasm/browser')`的方式引入。这反映了WebAssembly模块的跨平台特点,能够适应不同的运行环境。 - **React使用**: 通过类似的方式`const bls = require('bls-wasm/browser')`说明了在React项目中如何集成`bls-wasm`。 - **版本兼容性**: 提到v0.4.2版本破坏了入口点的向后兼容性,意味着从这个版本开始,库的API可能发生了变更,需要开发者注意更新。 #### 执照信息 - **修改了新的执照**: 说明了关于软件许可证的新变化,暗示了库的许可证可能由之前的版本有所更新,需要用户关注和遵守新的许可证条款。 #### 压缩包文件信息 - **bls-wasm-master**: 由于提供了压缩包文件的名称列表,暗示了一个名为`bls-wasm`的项目,可能包含源代码、编译后的文件、文档等。 ### 知识点的深入拓展 #### WebAssembly在Node.js中的应用 WebAssembly在Node.js中的主要优势在于性能的提升,特别是在处理CPU密集型任务时。WebAssembly模块可以运行C/C++、Rust等语言编写的代码,并且这些代码在WebAssembly的沙盒环境中执行得非常快。 #### BLS签名在区块链中的作用 区块链技术依赖于密码学来确保交易的安全性和验证性。BLS签名因其在密钥长度、签名长度、签名速度以及多签性能等方面的优点,非常适合被用于区块链网络。它允许验证者更快地验证交易,并提高了区块链的处理能力。 #### Node.js环境下的安全实践 在Node.js环境中使用BLS签名或任何加密算法时,应当遵循安全实践,例如确保密钥的安全管理,避免在不安全的通道中传输密钥,以及定期更新和轮换密钥等。 #### 跨平台兼容性的重要性 对于WebAssembly模块来说,能够在不同的环境(如Node.js、浏览器、React应用等)中无缝工作是至关重要的。开发者需要关注不同平台间的API差异和兼容性问题。 #### 软件许可证的遵守 软件许可证规定了开发者如何使用该软件,以及他们可以对软件进行哪些修改和分发。遵循许可证的规定不仅可以避免法律风险,还可以确保代码的使用和传播不会侵犯原作者的权益。 综上所述,`bls-wasm`模块作为一个在WebAssembly环境下运行的BLS签名工具,为Node.js和Web开发者提供了强大的密码学能力,特别是对于希望支持以太坊2.0等区块链技术的项目。开发者在使用这类工具时,需要关注性能、兼容性、安全性和许可证等多方面的要求。
recommend-type

提升Linux终端使用效率的实用指南

### 提升 Linux 终端使用效率的实用指南 #### 1. i3wm 窗口管理基础操作 在 i3wm 中,创建新的窗口块(tiles)就等同于打开应用程序,因为所有应用程序都以窗口块的形式呈现在窗口管理器的网格中。 - **创建窗口块**: - 打开终端:使用 `win + enter`。 - 打开其他应用程序:按下 `win + d`,屏幕左上角会弹出一个小对话框,输入应用程序名称,对话框会显示自动补全状态,当显示目标程序时,按下“打开”,应用程序将以窗口块形式打开。 - **窗口块布局调整**: - 打开更多应用程序会在工作区自动创建更多窗口块,并在网格中分
recommend-type

现有以下数据: String[] keyAry: [{"fields":[{"name":"类型"}, {"name":"中问题", "width":"400px"}, {"name":"小问题", "width":"400px"}]}] String[] value: [{"fieldvalues":[{"value":"人员","row":0,"col":0},{"value":"1","row":0,"col":1},{"value":"1","row":0,"col":2}]},{"fieldvalues":[{"value":"设施","row":1,"col":0},{"value":"2","row":1,"col":1},{"value":"2","row":1,"col":2}]}] 请使用java语言将以上数据转化为word的表格,具体格式如下: 类型 中问题 小问题 人员 1 1 设施 2 2 其中,表格第一行是keyAry数组的name属性,value数组中每个fieldvalues属性作为一行

<think> 我们使用Apache POI库来操作Word文档生成表格。 步骤: 1. 创建文档对象,并创建一个表格。 2. 首先,我们创建表头行(第一行),遍历keyAry数组,取出每个元素的name属性作为表头单元格的内容。 3. 然后,遍历value数组,每个元素代表一行数据。每个元素有一个fieldvalues数组,这个数组中的每个元素对应一个单元格。 4. 注意:keyAry数组的长度应该与fieldvalues数组的长度一致,因为它们分别代表列名和每列的值。 假设数据结构如下: keyAry: 数组,每个元素是一个对象,对象有name属性(表头名称) v
recommend-type

2000年代初的粉丝创神奇宝贝网站回顾

标题和描述中提到的“jps1:杰西(Jesse)基于粉丝的终极口袋妖怪网站(2000-2001)”反映了以下几个重要知识点: 1. 网站建设与维护的早期阶段:从2000到2001年的时间段中,互联网技术正处于快速发展时期,而杰西(Jesse)创建的这个口袋妖怪主题网站,可以被视作个人站长时代的早期代表作。这代表了早期网络用户利用有限资源进行个人兴趣爱好的分享和推广。 2. 基于粉丝的互动平台:这个网站明确指出是基于粉丝而创建的,这表明了网络社区中粉丝文化的存在和影响力。在那个时期,围绕特定兴趣(如口袋妖怪)形成的粉丝群体,通过这些网站交流信息、分享资源,这种基于共同兴趣建立的社区模式对后来的社交媒体和粉丝经济有着深远影响。 3. 个人网站的存档意义:杰西(Jesse)在描述中提到了出于存档目的而发布,这说明了这个网站对于网络历史保存的重要性。随着互联网内容的快速更迭,个人网站往往由于服务器迁移、技术更新等原因而丢失,因此存档个人网站是对互联网文化遗产的一种保护。 关于标签“JavaScript”,它指向了一个重要的知识点: 4. JavaScript在网络技术中的作用:标签“JavaScript”点出了该网站使用了JavaScript技术。作为早期的动态网页脚本语言,JavaScript在提高用户交互体验、网页特效实现等方面发挥了关键作用。尽管该网站发布的年份较早,但极有可能包含了一些基础的JavaScript代码,用于实现动态效果和基本的客户端交互。 至于“压缩包子文件的文件名称列表”中的“jps1-gh-pages”,它暗示了以下知识点: 5. GitHub Pages的使用:GitHub Pages是GitHub提供的一项服务,允许用户将网站内容部署到一个独立的域名下,通过“jps1-gh-pages”文件名我们可以推测,这个口袋妖怪网站可能是被部署在GitHub Pages上的。这表明了即使在早期,个人站长已经开始利用现代网络服务来托管和分享他们的项目。 6. 压缩文件的作用:文件名称中的“压缩”二字意味着该网站的文件内容可能是经过压缩处理的,这可能是为了便于存储和传输。在互联网早期,由于带宽和存储空间的限制,压缩文件是一种常见的数据管理手段。 总结以上知识点,可以归纳为: - 网站建设与维护的早期案例,以及个人站长时代的特点。 - 基于粉丝文化的网络社区,及其对后来社交媒体的影响。 - 个人网站的存档价值和对互联网文化遗产的贡献。 - JavaScript的早期应用以及它在改善用户交互体验方面的重要性。 - GitHub Pages的使用案例,以及压缩技术在网络数据管理中的应用。 从这些知识点可以看出,即便是早期的个人网站项目,也蕴含了丰富的技术和文化内涵,为理解互联网的发展和应用提供了重要的视角。
recommend-type

Linux终端实用工具与技巧

# Linux 终端实用工具与技巧 ## 1. gnuplot 绘图与导出 ### 1.1 绘制方程图形 任何方程都可以用特定方式绘制图形。例如,一个斜率为 5、y 轴截距为 3 的直线方程,可使用以下命令生成图形: ```bash plot 5*x + 3 ``` ### 1.2 导出图形为图像文件 虽然能在终端显示图表,但多数情况下,我们希望将图表导出为图像,用于报告或演示。可按以下步骤将 gnuplot 设置为导出图像文件: 1. 切换到 png 模式: ```bash set terminal png ``` 2. 指定图像文件的输出位置,否则屏幕将显示未处理的原始 png 数据: