整涂中线、包装中线、整涂旧小线、包装旧小线、整涂新小线、包装新小线、机台都是属于一期水冷下的工序,他们的数据条目都是不固定的,数据库的字段都是区域、工序、规格、支数,需要在表格中(或者帆软里面)让他们对齐的解决办法。
1.需要求出机台工序、中线工序、小线工序中数据最长的数目
2.比较最长的数据数目,可以用后台处理语言对每一列不够的进行填充空行处理,也可以利用SQL进行查询。
SQL查询语句处理如下:
1.借助一个数据表numtable(id,mnum),mnum是从1开始的连续的数据,预估好上面的数据表的最长数目以后,这里的numtable的mnum只要比他大就行,也可以直接插入几百条进去,这样就不需要预估数目了。
2.处理语句如下【DB2语句】:
-- 查询机台工序的数据
-- '一期水冷' AS LINE 为了方便帆软自动合并单元格
SELECT '一期水冷' AS LINE,tmp.* FROM GBSC00.NUMTABLE ntab
LEFT JOIN (
-- 查询机台数据,其他工序只要把后面的条件换了即可
SELECT ROW_NUMBER() OVER() AS mynum,UNIT_CODE,INDEX_CODE,PIPE_DIA_DESC,
MAT_NUM,PROD_SHIFT_NO FROM GBSC00.TDEZG17_ADS WHERE LINE_CODE='一期水冷' AND UNIT_CODE <>''
AND PIPE_DIA_DESC<>'' AND WORK_DATE ='2022-11-08' ORDER BY UNIT_CODE,INDEX_CODE
) tmp ON NTAB.MNUM=tmp.mynum
WHERE MNUM<=(
-- 获取最大的行数
SELECT MAX(mynum) FROM (
-- 一期水冷机台数据的条数
SELECT count(*) AS mynum FROM GBSC00.TDEZG17_ADS ta WHERE LINE_CODE='一期水冷'
AND UNIT_CODE <>'' AND PIPE_DIA_DESC<>'' AND WORK_DATE ='2022-11-08'
UNION ALL
-- 一期水冷中线数据的条数
SELECT count(*) AS mynum FROM GBSC00.TDEZG17_ADS ta WHERE LINE_CODE='一期水冷'
AND PIPE_DIA_DESC<>'' AND INDEX_CODE IN ('包装中线','整涂中线') AND WORK_DATE ='2022-11-08'
UNION ALL
-- 一期水冷小线数据的条数
SELECT count(*) AS mynum FROM GBSC00.TDEZG17_ADS ta WHERE LINE_CODE='一期水冷'
AND PIPE_DIA_DESC<>'' AND INDEX_CODE IN ('整涂旧小线','包装旧小线','整涂新小线','包装新小线')
AND WORK_DATE ='2022-11-08'
)
)
以上分开查询适合聚合报表,如果需要根据报表查询成一横行,那么可以把3个工序UNION起来,然后用max那样查询即可