0

我觉得这有点奇怪,虽然我知道 SQL,但我在我的职业生涯中从来没有写过这样的查询。

我的要求是这样的:

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

PROJECTNAME OBJECTTYPE  OBJECTID1   OBJECTVALUE1    OBJECTID2   OBJECTVALUE2    OBJECTID3   OBJECTVALUE3    OBJECTID4   OBJECTVALUE4

我需要编写一个查询,它必须获取父项目名称的子行或子项目名称,我将在查询中传递它。

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 也是如此。

此外,需要在这些表中找到相似的对象,并显示那里的数量。

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

4

2 回答 2

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
于 2013-06-13T07:22:47.233 回答
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。

唯一悬而未决的事情是在孩子和父母之间找到重复的行,即孩子和父母的共同对象的计数是多少。

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

于 2013-06-13T07:53:22.363 回答