在表格中建立零件时(“ASC_PMA_TBL”),则会自动生成一个编号。随后创建的任何“子部件”都有一个关联的编号。因此,例如,“主”部件可能是18245,它可能有几个子部件,如“18245-50”或“18245-40”等。子部件总是通过具有主部件编号来识别,后跟一个'-',然后是一个两位数。每个子部分都有一个与之关联的日期(“EO_DATE”)。我所要做的就是显示“主”日期与每个子部分日期不匹配的记录。所有数据都在一个表“ASC_PMA_TBL”中。
通常使用连接很容易做到这一点。但是在数据库中,子部分并不通过外键与它们的主部分相关联,所以我不得不找到一种不同的方法来做事情。
此外,日期字段是一个日期/时间字段,所以为了比较它们,我首先必须将该字段转换为仅包含日期的字段。我可以这样做,但无法在查询中使用别名!
任何帮助都非常感谢:)
我尝试过创建临时表和使用子查询,但无法解决此问题:(
UPDATE:使用临时表设法解决了这个问题,截断子部件的部件号以匹配主部件,然后连接两者以比较日期。可能很混乱,但它很有效!
SELECT
PMA_PART_ONLY,
CONVERT(DATE,PMA_EFFECT_DATE_OFF) As 'EO_DATE'
INTO
##MParts
FROM
ASC_PMA_TBL
WHERE
(PMA_PROC_CODE = 'M') AND
(PMA_EFFECT_DATE_OFF IS NOT NULL)
SELECT
PMA_PART_ONLY,
CONVERT(DATE,PMA_EFFECT_DATE_OFF) As 'EO_DATE',
SUBSTRING(PMA_PART_ONLY,0,CHARINDEX('-',PMA_PART_ONLY,0)) As 'MP_NO'
INTO
##SParts
FROM
ASC_PMA_TBL
WHERE
(PMA_PROC_CODE = 'S') AND
(PMA_EFFECT_DATE_OFF IS NOT NULL)
SELECT
##SParts.PMA_PART_ONLY As 'SUB_PART_NO',
##MParts.EO_DATE As 'M_PART_DATE',
##SParts.EO_DATE As 'S_PART_DATE'
FROM
##MParts INNER JOIN ##SParts ON ##SParts.MP_NO = ##MParts.PMA_PART_ONLY
WHERE
(##MParts.EO_DATE <> ##SParts.EO_DATE)
ORDER BY
SUB_PART_NO DESC
DROP TABLE ##MParts
DROP TABLE ##SParts
1条答案
按热度按时间mf98qq941#
如果您只想比较日期而不想比较时间,则必须转换日期:
这是主要的想法,获得所有的母版和零件,其中零件编号类似于母版编号+下视镜。
请注意,在执行LIKE时,必须对[]引号中的“_”进行转义