표 B에는 계획된 값이 있습니다. 표 M은 실제 값을 유지합니다. 테이블 B에서 모든 행을 찾아야하는데, 여기에는 테이블 M에 실제 값 (즉, 조인 된 행)이 있거나 조인 된 행의 총 실제 값 행이 서로 다른 경우가 있습니다. 달성하기 위해 외부 조인과 합계 ... 그룹을 조합하려고 시도하지만 테이블 B의 '고아'가 반환되지 않기 때문에 작동하지 않습니다. 나는 실제 데이터를 비교하고 가입하고 난 행을 얻을 계획하기> = 대신 <으로 사용하는 경우왼쪽 가입/합계가있는 SQL Server/
SELECT B.Id, B.Date, b.Ref,SUM(M.Actual_Volume), SUM(B.Planned_Volume),
SUM(M.Actual_Value),SUM(B.Planned_Value)
FROM
TableB B
left JOIN TableM M on M.Id = B.Id
inner JOIN TableX on TableX.FieldX = B.FieldX
WHERE TableX.FieldY = (SELECT T.FieldY from TableX T where T.FieldX = 408344)
AND TableX.FieldZ = (SELECT T1.FieldZ from TableX T1 where T1.FieldX = 408344)
group by B.Id, B.Date, B.Ref
having SUM(M.Actual_Volume) <> SUM(B.Planned_Volume)
OR SUM(M.Actual_Value) <> SUM(B.Planned_Value)
order by b.Id
,하지만 난 실제 데이터가 계획과 동일하지 않는 행을 필요 - :
내 쿼리입니다 , 또는 계획된 것이지만 실제는없는 곳.
감사합니다.
Table B
Id planned_vol planned val
19 2 350
28 1 100
53 3 650
61 1 50
Table M
M.Id B.Id actual_vol actual_val
58 19 2 350
65 28 1 100
66 53 1 150
그래서 쿼리가 반환해야합니다,
B.Id
53 (because planned_vol <> actual_vol and planned_val <> actual_val)
61 (because B.Id 61 is not in table M)
HTH!
당신이하지 않는 일부 샘플은 (모두 이유) 반환 할 행의 데이터 및 적어도 하나 개의 행을 보여 주시겠습니까 돌려주고 싶다. –
빠른 수정은 'SUM (M.Actual_Volume) is null 또는 SUM (M.Actual_Value) is null'을 having 절에 추가하는 것이지만 n : m 관계의 양측을 합산하려고한다고 생각합니다. 데이터 복제가 종료됩니다. M과 B 사이의 스키마와 관계에 대한 정보를 더 게시 할 수 있습니까? –
예, TableB to TableM은 m : m 정의 테이블이 TableX이기 때문에 – epx