我发现这有点奇怪,虽然我知道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是相同的。
另外,需要在这些表中找到相似的对象,并显示有计数。
我认为内连接或交叉连接都可以显示计数。
答案 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。
唯一待定的是在子和父之间找到重复的行,即子和父的公共对象的计数。
这方面的帮助会很棒,谢谢。