如何找到哪个是'WHERE子句中传递,也是一个父项目的子项目,找到重复的对象(How to

2019-10-30 09:53发布

我发现这有点不可思议,但我知道SQL,但我从来没有在我的职业生涯写这样的查询。

我的要求是这样的:

我有一个名为PSPROJECTITEM表,其中有这些列:

PROJECTNAME OBJECTTYPE  OBJECTID1   OBJECTVALUE1    OBJECTID2   OBJECTVALUE2    OBJECTID3   OBJECTVALUE3    OBJECTID4   OBJECTVALUE4

我需要写一个具有获取子行或父PROJECTNAME,我将在查询中传递的孩子PROJECTNAME查询。

SELECT PROJECTNAME AS PARENTPROJECT, COUNT(*) AS PARENTOBJECTCOUNT FROM PSPROJECTITEM where PROJECTNAME = 'AAAA_JOB_KJ'

我的目标是找到我在这里过去了,也该项目的子项目,以获得其他值,我认为这是行数的总数的计数,如AAAA_JOB_KJ在表中的199总数。

我想子项目,计数,而且,重复计数的数量,即,许多家长和孩子对象如何相似,我的意思是,这是家长和孩子之间的相似对象的数量。 现在希望这是明确的。

下面是示例数据:

Parent Project Name Parent Project Count    Child Project           Child Count  Similar Object Count
AAAA_JOB_KJ         199                     AZ_AUTOFILL_SP1         11           3
AAAA_JOB_KJ         199                     AZ_CSRIDHAR_0518        3            1
AAAA_JOB_KJ         199                     AZ_DUP_TERM_FACT        2            1
AAAA_JOB_KJ         199                     AZ_E000316038_HCM_789   2            1
AAAA_JOB_KJ         199                     AZ_E000368318_PROJ      3        2
AAAA_JOB_KJ         199                     AZ_HCM_1104_SPD_1028    7        1
AAAA_JOB_KJ         199                     AZ_HCM_889_SPD_871      11       1
AAAA_JOB_KJ         199                     AZ_JOB_CHANGE           5            1
AAAA_JOB_KJ     199                 AZ_MGR_TERMIN       31           1
AAAA_JOB_KJ         199                 AZ_PAYROLL_VALIDATIONS  19       4
AAAA_JOB_KJ     199                 AZ_Q4AUTOCHG        22           2
AAAA_JOB_KJ     199                 AZ_Q4AUTOCHG_ENHCMT     8            2
AAAA_JOB_KJ     199                 AZ_Q4_BCKUP         225         130

请注意,子对象的数量可以比父项目更多。

另外,还要注意有两个样的项目,一个是仁科交付和其他人的自定义项目。 我觉得一般的查询将能够处理这个问题。

请让,我知道,如果需要任何其他修改,因为我知道,这是非常复杂的,而且,这需要编辑的一点,我尝试过,但对如何做到这一点也找不到,我是最适合这个遗憾

在使用数据库是Oracle。

都是在同一个表。

由主持人编辑补充:

父项目是PSPROJECTITEM 。 假设我有查询,

SELECT PROJECTNAME AS PARENTPROJECT, COUNT(*) AS PARENTOBJECTCOUNT 
FROM PSPROJECTITEM where PROJECTNAME = 'AAAA_JOB_KJ'

我需要一个查询来获取这个项目是我在where子句中过去了,孩子的项目的数量,而且,副本计数的子项目。

** **加成

下面的查询能够完成大部分预定的。

现在,需要修改一下:

我的样本数据是这样的:

父项目名称父项目计数子项目儿童计数类似的对象计数AAAA_JOB_KJ 199 AZ_AUTOFILL_SP1 11 3

但查询的输出是这样的:

父项目名称父项目数子项目儿童数类似的对象计数AAAA_JOB_KJ 5 AZ_AUTOFILL_SP1 5

5是错误的,199是期望的,因为AAAA_JOB_KJ的计数是199在表中,同为AZ_AUTOFILL_SP1。

此外,需要找到在这些表中的类似的对象,并显示有指望。

我认为,无论是内连接或交叉连接会做,显示计数。

Answer 1:

这是最有答案的,因为我们的互动聊天确定:

SELECT A.projectName as PARENT,COUNT(A.PROJECTNAME) AS PARENTPROJECTCOUNT, 
    B.ProjectName as CHILD, COUNT(B.PROJECTNAME) AS CHILDPROJECT from psprojectitem 
a INNER JOIN psProjectItem B 
ON a.objecttype = b.objecttype 
AND a.objectid1 =b.objectid1 
AND a.objectvalue1 = b.objectvalue1 
AND a.objectid2 = b.objectid2 
AND a.objectvalue2 = b.objectvalue2 
AND a.objectid3 = b.objectid3 
AND a.objectvalue3 = b.objectvalue3 
AND a.objectid4 = b.objectid4 
AND a.objectvalue4 = b.objectvalue4 
WHERE A.projectname in 
(SELECT ProjectName from psProjectDefn WHERE lastupdoprid <> 'pplsoft') 
AND a.projectname <> B.projectName 
and A.PROJECTNAME = 'AAAA_JOB_KJ' 
ORDER BY B.PROJECTNAME


Answer 2:

我能够实现大部分的要求:

SELECT A.projectName as PARENT,
(select COUNT(*) from PSPROJECTITEM WHERE PROJECTNAME = A.PROJECTNAME) parentprojecount, 
B.ProjectName as CHILD, 
(select COUNT(*) from PSPROJECTITEM WHERE PROJECTNAME = B.PROJECTNAME) CHILDPROJECT from psprojectitem 
a  INNER JOIN psProjectItem  B 
ON a.objecttype = b.objecttype 
   AND a.objectid1 =b.objectid1 
   AND a.objectvalue1 = b.objectvalue1 
   AND a.objectid2 = b.objectid2 
   AND a.objectvalue2 = b.objectvalue2 
   AND a.objectid3 = b.objectid3 
   AND a.objectvalue3 = b.objectvalue3 
   AND a.objectid4 = b.objectid4 
   AND a.objectvalue4 = b.objectvalue4
WHERE A.projectname in 
(SELECT ProjectName from psProjectDefn WHERE lastupdoprid <> 'pplsoft') 
AND a.projectname <> B.projectName
and A.PROJECTNAME = 'AAAA_JOB_KJ'

group by A.PROJECTNAME,B.PROJECTNAME
ORDER BY B.PROJECTNAME

产生的输出是:

AAAA_JOB_KJ 199 AZ_AUTOFILL_SP1 11日

这是挂起的唯一的事情就是找到孩子和家长之间重复的行,即哪些儿童和家长的共通对象的计数。

帮助上,这将是巨大的,谢谢。



文章来源: How to find the child project of a parent project which is passed in the 'WHERE' clause and also, to find the duplicate objects