我有两个表一个(A)包含假日日期,第二个(B)包含出发,到达日期和提前期。我想要的是从提前期中扣除假期数。
所以我想要B的每个记录,看看A的记录在出发和到达日期之间有多少,然后从提前期扣除。
这对SQL是否可行?
伪SQL代码:
Select
B.Lead time - SUM(CASE WHEN A.Holiday BETWEEN B.ArrDate AND B.DepDate
then 1
ELSE 0
)
from A, B
答案 0 :(得分:0)
FROM a, b
会给你一个交叉加入(笛卡尔积),这可能不是你想要的。我想您需要LEFT JOIN
和GROUP BY
的提前期:
SELECT b.lead_time - SUM( CASE WHEN a.holiday BETWEEN b.arrDate AND b.depDate THEN 1 ELSE 0 END )
FROM b LEFT JOIN a
ON a.holiday BETWEEN b.arrDate AND b.depDate
GROUP BY b.lead_time
只要lead_time
中的b
应该是唯一的,那就可行。
答案 1 :(得分:0)
我认为这将更加普遍:
SELECT
A.DEP_DATE,A.ARR_DATE,(LEAD_TIME-X.CNT) FROM A,
(SELECT DEP_DATE,ARR_DATE, COUNT(*) AS CNT FROM A,B WHERE B.HOLIDAYS BETWEEN A.DEP_DATE AND A.ARR_DATE
GROUP BY DEP_DATE,ARR_DATE) X
WHERE
A.DEP_DATE=X.DEP_DATE
AND
A.ARR_DATE=X.ARR_DATE
答案 2 :(得分:0)
我倾向于使用相关子查询来回答这个问题:
Select (B.Leadtime -
(select count(*)
from a
where a.Holiday between b.ArrDate AND b.DepDate
)
)
from B;
您的假期表应具有holiday
的索引。