SQL查询“情况” - 显示在同一行
我想获得的提交2个文件的状态结果,是否“合格”,“失败”或从表中PROCESSED_FILE_LOGS“未提交”。SQL查询“情况” - 显示在同一行
第一个文件名不包含“PCR”的文件名,第二个文件名中包含“PCR”的文件名,这就是我这2个文件之间如何区分。
合同#是被提交这2个文件的那些和我结合4个不同的表来填充下方。
2点的问题我有这个表,当我运行我的查询[下文]:
我。'H0000'被重复,尽管查询,拉MAX(PF.processed_date) - 我试图得到文件1和文件2的最后处理状态。
ii。对于“H0000”,两者的文件不会在同一行显示,这意味着状态 - 在一个行对文件1个显示状态,以及在第二行中为文件2个显示状态。
我的查询:
select distinct
OC.cms_contract_number as 'Contract #'
,case when (PF.PROCESSED_FILE_NAME not like '%PCR%' and FS.DISPLAY is not null) then FS.display else 'Not Submitted' end as 'File 1 Status'
,case when (PF.PROCESSED_FILE_NAME like '%PCR%' and FS.DISPLAY is not null) then FS.display else 'Not Submitted' end as 'File 2 Status'
,MAX(PF.processed_date) as 'Date Submitted'
from
((((persons P join person_affiliations PA on P.person_id = PA.person_id)
join external_orgs EO on EO.org_id = PA.org_id)
join org_contracts OC on OC.org_contracts_id = PA.org_contracts_id)
left outer join processed_file_logs PF on PF.org_contracts_id = OC.org_contracts_id)
left outer join processed_file_status FS on FS.file_status_id = PF.file_status_id
group by OC.CMS_CONTRACT_NUMBER, PF.SUBMISSION_ID,
FS.DISPLAY, PF.PROCESSED_FILE_NAME
我在哪里去了?
好了,更新了这个答案,以反映您的评论如下 - 有一大堆语法在这里我可能搞砸了,这是不可能的,我将能够给你最终的完美解决方案,无需访问这些表,但在这里你去:
基本上你的数据是脱节的,因为要跨越多行数据汇总为两个不同的列。我们可以使用“with”查询来创建查找两个文件中每个文件的最后一次提交的数据表,然后通过合同编号键将其重新匹配到主数据集。
With A as (select OC.cms_contract_number as cms_contract_number, PF.PROCESSED_FILE_NAME as PROCESSED_FILE_NAME, FS.DISPLAY as DISPLAY, PF.processed_date as processed_date
from
((((persons P join person_affiliations PA on P.person_id = PA.person_id)
join external_orgs EO on EO.org_id = PA.org_id)
join org_contracts OC on OC.org_contracts_id = PA.org_contracts_id)
left outer join processed_file_logs PF on PF.org_contracts_id = OC.org_contracts_id)
left outer join processed_file_status FS on FS.file_status_id = PF.file_status_id)
select distinct
A.cms_contract_number as 'Contract #'
,max(s1.FileStatus) as 'File 1 Status'
,max(s2.FileStatus) as 'File 2 Status'
,MAX(A.processed_date) as 'Date Submitted'
from A
left outer join
(
select distinct
A.cms_contract_number as 'Contract'
,case when (A.DISPLAY is not null) then A.display else 'Not Submitted' end as 'FileStatus'
,MAX(A.processed_date) as 'DateSubmitted'
from A
where A.PROCESSED_FILE_NAME not like '%PCR%' or A.PROCESSED_FILE_NAME is null
group by A.CMS_CONTRACT_NUMBER, case when (A.DISPLAY is not null) then A.display else 'Not Submitted' end
) s1 on s1.Contract = A.CMS_CONTRACT_NUMBER and s1.DateSubmitted = A.processed_date
left outer join
(
select distinct
A.cms_contract_number as 'Contract'
,case when (A.DISPLAY is not null) then A.display else 'Not Submitted' end as 'FileStatus'
,MAX(A.processed_date) as 'DateSubmitted'
from A
where A.PROCESSED_FILE_NAME like '%PCR%' or A.PROCESSED_FILE_NAME is null
group by A.CMS_CONTRACT_NUMBER, case when (A.DISPLAY is not null) then A.display else 'Not Submitted' end
) s2 on s2.Contract = A.CMS_CONTRACT_NUMBER and s2.DateSubmitted = A.processed_date
group by A.CMS_CONTRACT_NUMBER
还要注意,如果你想提交的每个文件1和文件2日最后,这将是一个相当简单的练习将其拉出现在也:
在主查询仅只是改变:
MAX(PF.processed_date) as 'DateSubmitted'
到:
max((select s1.DateSubmitted from StatusOfLastFile1 s1 where s1.Contract = A.CMS_CONTRACT_NUMBER)) as 'File 1 Last Submit',
max((select s2.DateSubmitted from StatusOfLastFile2 s2 where s2.Contract = A.CMS_CONTRACT_NUMBER)) as 'File 2 Last Submit'
啊哈 - 那么您希望在提供文件1和文件2的状态的计算字段中显示什么?你想要提交该类型的最新文件的状态,或者如果该文件类型为空,是否为“未提交”? (或者你想要提交任何文件的'最佳'状态?) – user681574
我希望对同一行上的两个文件提交最新的文件提交处理。文件1可能在第10次处理后的状态为昨天并且文件2可能已经在今天处理失败,并且我的行应该包含最后处理的文件1状态和最后处理的文件2状态。 – Ron
我已经更新了答案,希望能够抓住这些要求。 – user681574
会发生什么事,如果你从GROUP BY删除PF.SUBMISSION_ID? – jarlh
这是在微软访问?请标记您正在使用的dbms。 – SqlZim
@jarlh,我收到一个错误,说'列'processed_fole_logs.SUBMISSION_ID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中 – Ron