2012-09-13 1 views
1

MS Query의 수동 SQL 문 창을 사용하여 ODBC 연결 데이터베이스에서 데이터를 가져 오는 데 며칠 (grrr) 동안 노력했습니다. 나는 그것이 무엇을하고 싶은지 알 수 있지만 구문에 매달려있다. (나는 MS Query에만 국한되어있다.) I는 네 개의 테이블이MS Query에서 다중 INNER JOIN을 사용하는 FROM 절의 구문

:

문제점이있다간에화물, 배송 설비를 통해 처리 중량 정보를 포함하는, waybill, waybill_item, rail_blrail_bl_item을 어느 트럭 (운송장) 또는 레일에 라우팅되고 (레일). waybillrail_bl 테이블에는 트럭 및 철도화물에 대한 날짜 데이터가 각각 포함됩니다. waybill_itemrail_bl_item에는 해당 항목의 가중치에 대한 데이터가 들어 있습니다.

매일 매일 처리되는 총 중량 (철도 및 트럭 운송)을 반환하는 테이블이 필요합니다. I.E. 쿼리를 수행함으로써

DATE | WEIGHT 
date1, (truck_weight_for_date1+rail_weight_for_date1) 
date2, (truck_weight_for_date2+rail_weight_for_date2) 
date3, (truck_weight_for_date3+rail_weight_for_date3) 
etc 

, 나는 특정 날짜에 특정 날짜에 레일 및 총 무게 트럭의 총 무게를 포함하는 두 개의 열 결과를 얻을 수 있어요

SELECT waybill.creation_date, sum(waybill_item.weight) 
FROM waybill 
INNER JOIN waybill_item 
ON waybill.id = waybill_item.waybill_id 
WHERE waybill.creation_date > '01/01/2012' 
GROUP BY waybill.creation_date 
UNION 
SELECT rail_bl.creation_date, sum(rail_bl_item.total_weight) 
FROM rail_bl 
INNER JOIN rail_bl_item 
ON rail_bl.id = rail_bl_item.rail_bl_id 
WHERE rail_bl.creation_date > '01/01/2012' 
GROUP BY rail_bl.creation_date 
ORDER BY waybill.creation_date DESC 

별도의 기록에 , 그래서 내 결과는 다음과 같습니다

DATE | WEIGHT 
date1, truck_weight_for_date1 
date1, rail_weight_for_date1 
date2, truck_weight_for_date2 
date2, rail_weight_for_date2 
date3, truck_weight_for_date3 
date3, rail_weight_for_date3 
etc 

내가 타격 해요하다가 내가 얻을 수 있다는 것입니다 MS 가야를 위 쿼리를 하위 쿼리로 사용하고 각 날짜의 레코드를 합계로 받아들입니다. 하위 쿼리로 내 쿼리를 테스트하려고해도 작동하지 않습니다. .. 심지어 경우 -

SELECT * FROM 
(
SELECT waybill.creation_date, sum(waybill_item.weight) 
FROM waybill 
INNER JOIN waybill_item 
ON waybill.id = waybill_item.waybill_id 
WHERE waybill.creation_date > '01/01/2012' 
GROUP BY waybill.creation_date 
UNION 
SELECT rail_bl.creation_date, sum(rail_bl_item.total_weight) 
FROM rail_bl 
INNER JOIN rail_bl_item 
ON rail_bl.id = rail_bl_item.rail_bl_id 
WHERE rail_bl.creation_date > '01/01/2012' 
GROUP BY rail_bl.creation_date 
) 
ORDER BY waybill.creation_date DESC 

반환에 "테이블을 추가 할 수 없습니다 '('"오류 기타 구문 변종과 유사한 오류를 반환

사람이 알고 있나요 시도 예를 들어

- - MS Query는 이와 같은 하위 쿼리를 수행 할 수 있습니까? 사전에 도움을 주셔서 감사합니다.

답변

0

하위 쿼리로 사용하려면 두 곳에서 별칭이 필요합니다. 첫째, 열은 이름이 필요합니다. 둘째, 파생 된 표에는 이름이 필요합니다.

select * 
from (SELECT waybill.Creation_date, sum(waybil_item.weight) as Weight 
     . . . 
     union all 
     . . . 
    ) t 
order by 1 desc 

그런데 UNION 대신 UNION ALL이 필요합니다. 주어진 날짜에 동일한 값을 얻은 경우, UNION은이를 제거합니다.

+0

의견에 감사드립니다. 고든. 내가 지금 실행하고있는 문제는 INNER JOIN이있는 하나의 선택에 대해서만 별칭을 지정하려는 것입니다. 내가 운송장 로부터 Total_Weight 그대로 'SELECT waybill.creation_date, 합계 (waybill_item.weight)를 시도하는 경우 INNER는 가입 waybill_item ON waybill.id = waybill_item.waybill_id WHERE waybill.creation_date>/01/2012'운송장 BY GROUP '01 .creation_date' 가중치 필드의 헤더가 공백으로 남아 있고 SQL 창으로 돌아가서 "AS Total_Weight"가 사라 졌음을 보여줍니다. 어떤 제안? 나는 이것에 아주 새롭다. – PriceHardman