如何查找在“WHERE”子句中传递的父项目的子项目,以及查找重复对象

时间:2013-06-13 05:07:54

标签: sql oracle peoplesoft

我发现这有点奇怪,虽然我知道SQL,但我从未在职业生涯中写过这样的问题。

我的要求是这样的:

我有一个名为PSPROJECTITEM的表,它包含以下列:

PROJECTNAME OBJECTTYPE  OBJECTID1   OBJECTVALUE1    OBJECTID2   OBJECTVALUE2    OBJECTID3   OBJECTVALUE3    OBJECTID4   OBJECTVALUE4

我需要编写一个查询,该查询必须获取PARENT PROJECTNAME的子行或子PROJECTNAME,我将在查询中传递。

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

我的目标是找到我在这里传递的这个PROJECT的子项目,并且还获得其他值的计数,我认为这是行计数的总数,因为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

请注意,子对象的数量可能超过父项目。

另外,请注意,有两种项目,一种是peoplesoft交付,另一种是自定义项目。我认为一般的查询将能够解决这个问题。

请告诉我是否需要进行任何其他修改,因为我知道这非常复杂,而且,这需要一点点编辑,我试过了,但是找不到如何做到这一点,我是抱歉这个

正在使用的数据库是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是相同的。

另外,需要在这些表中找到相似的对象,并显示有计数。

我认为内连接或交叉连接都可以显示计数。

2 个答案:

答案 0 :(得分:0)

这是我们在互动聊天中确定的大部分答案:

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

答案 1 :(得分:0)

我能够达到大部分要求:

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。

唯一待定的是在子和父之间找到重复的行,即子和父的公共对象的计数。

这方面的帮助会很棒,谢谢。