我有两个表WIP和ROS,两个表都有很多列,但所需的主要列是 Branch,Date,LC和'DN'和'JCN'用于连接两个表,并且输出应采用以下格式 分支,日期,计数(*根据条件而定)/计数(*)
如前所述,两个表都有很多列,但对于我的查询:WIP包含Branch,Status,Date和DN列,ROS包含Branch,LC和JCN列
我使用了如下的case case语句:
select a.Branch,[Billed Date],avg(case when LC in
('A22D','SB15','SB16','AT01','AT02','AT03') then 1.0 else 0 end)
from WIP a join ROS b on a.DN = b.JCN
where a.[Status] = 'BILLED' and SUBSTRING(a.DN,1,3) = 'XJC'
group by a.Branch,[Billed Date]
order by 1,2
我试图在不使用case语句的情况下使用联接和相关子查询获取结果
我使用了以下查询,但是得到的结果不正确。
select a.Branch,[Billed Date],
1.0*(select count(*) from ROS where LC in ('A22D','SB15','SB16','AT01','AT02','AT03') and c.Branch =
a.Branch )/(select count(*) from ROS d where d.Branch = a.Branch)
from WIP a join ROS b on a.DN = b.JCN
where a.[Status] = 'BILLED' and SUBSTRING(a.DN,1,3) = 'XJC'
order by 1,2
我希望输出为:
Branch Date Average_Jobs
A 2019-06-01 0.11
B 2019-06-01 0.09
C 2019-06-01 0.12
A 2019-06-02 0.12
B 2019-06-02 0.10
C 2019-06-02 0.13
其中平均列是根据每个分支机构和每天的A22D,SB15,SB16,AT01,AT02,AT03等LC总数除以LC总数得出的。
我正在通过相关子查询获得低于输出的输出,我知道平均数字都错了:
Branch Date Avg
A 2019-06-01 0.032258065
A 2019-06-02 0.032258065
A 2019-06-03 0.032258065
A 2019-06-04 0.032258065
A 2019-06-05 0.032258065
A 2019-06-06 0.032258065
B 2019-06-01 0.032183908
B 2019-06-02 0.032183908
B 2019-06-03 0.032183908
B 2019-06-04 0.032183908
B 2019-06-05 0.032183908
B 2019-06-06 0.032183908
C 2019-06-01 0.032183908
C 2019-06-02 0.032183908
C 2019-06-03 0.032183908
C 2019-06-04 0.032183908
C 2019-06-05 0.032183908
C 2019-06-06 0.032183908
*****编辑: 我需要对查询进行修改,因为在手动检查后它没有给我正确的结果。问题在于DN是主键,而JCN是外键,在EX的LC列下有很多重复项:
WIP Table ROS Table
DN JCN LC
11A 11A A21X
12A 11A SB15
. 11A AT09
. 11A A22A
. 12A A22A
. 12A AT11
12A SB01
我的查询输出显示平均值为14.28%,因为在7行中,第二行的条件为“ SB15”。而我需要的平均值是50%。这是因为在DN列下有两个条目:11A和12A,并且只有其中一个具有我们感兴趣的LC,即“ SB15”。因此,平均值为50%的1/2 = 0.5。我知道我需要取JCN或DN的DISTINCT值的比率以获得正确的结果,我按如下方式使用DISTINCT,但未获得正确的结果:
select a.Branch,[Billed Date],avg(case when LC in
('A22D','SB15','SB16','AT01','AT02','AT03') then 1.0 else 0 end)
from WIP a join (select distinct JCN,LC from ROS) b on a.DN = b.JCN
where a.[Status] = 'BILLED' and SUBSTRING(a.DN,1,3) = 'XJC'
group by a.Branch,[Billed Date]
order by 1,2
有人可以让我知道该怎么做吗?
答案 0 :(得分:0)
SELECT
all_fields.*
FROM
(
SELECT
Branch,
MAX(Date)
FROM
yourtable
GROUP BY
Branch
) AS max_recs
LEFT OUTER JOIN yourtable AS all_fields ON max_recs.id = all_fields.id