1

각 지역에 1 개의 매장과 1 개의 창고가있는 5 개의 지역이 있습니다. 지역과 해당 상점 및 창고가 포함 된 테이블이 있습니다. 또한 매장과 창고의 재고 목록이있는 테이블도 있습니다. 마지막으로웨어 하우스의 허용 수량을 나열하는 표를 준비하십시오. , 상점 1 창고 1 지역 1에 속하는 문제는데카르트 제품 조인 및 제거

FACILITY ID  ITEM_NUMBER QTY 
    STORE 1    15D   2 
WAREHOUSE 1   15D   1 

나는이 형식으로보고 싶다 : 나는 지금 재고 테이블에 보면 그것은 무언가 같이 말할 것

REGION WAREHOUSE QTY OH  STORE QTY OH 
    1   1   2   1   1 
나는 좌우 교차 조인 조인 내부 조인 조인에서 내 주위 가입 변경

Create or replace view REGION_BALANCES 
as 
with WAREHOUSES as 
(select A.REGION_CODE, A.REG_DESC, A.WAREHOUSE_NUMBER, A.FACILITY_ID, 
     C.ITEM_NUMBER, sum(C.IN_STOCK_QTY) as IN_STOCK_QTY, 
     B.ALLOWED_QTY 
from REG_WHS_STR_ASSOC A         join 
     ALLOWANCES  B on (A.FACILITY_ID = B.FACILITY_ID) join 
     INVENTORIES  C on (A.FACILITY_ID = FACILITY_ID) and (B.ITEM_NUMBER = C.ITEM_NUMBER) 
group by A.REGION_CODE, A.REG_DESC, A.WAREHOUSE_NUMBER, C.ITEM_NUMBER, B.ALLOWED_QTY), 
STORES as 
(select A.REGION_CODE, A.REG_DESC, A.STORE_NUMBER, A.FACILITY_ID, B.ITEM_NUMBER, 
     sum(B.IN_STOCK_QTY) as IN_STOCK_QTY 
from REG_WHS_STR_ASSOC A         join 
     INVENTORIES  B on (A.FACILITY_ID = B.FACILITY_ID) 
group by A.REGION_CODE, A.REG_DESC, A.STORE_NUMBER, B.ITEM_NUMBER 
) 
select A.REGION_CODE, A.REG_DESC, A.WAREHOUSE_NUMBER, A.FACILITY_ID, 
     WAREHOUSES.ITEM_NUMBER, WAREHOUSES.IN_STOCK_QTY, WAREHOUSES.ALLOWED_QTY, 
     STORES.STORE_NUMBER, STORES.FACILITY_ID, STORES.ITEM_NUMBER, STORES.IN_STOCK_QTY 
from REG_WHS_STR_ASSOC A            join 
     WAREHOUSES   on (A.REGION_CODE = WAREHOUSES.REGION_CODE) join 
     STORES    on (A.REGION_CODE = STORES.REGION_CODE) 
order by 5,1 asc; 

;

및 등등 ... 그래서 나는 다음과 같은 SQL을 썼다 그러나, 나는 30 개의 레코드를 얻습니다. (그리고 나는 수백 개의 레코드가 필요합니다.) 나는 Cartesian 제품을 얻습니다. 누구든지 내가 뭘 잘못하고있어 조언을 제공 할 수 있습니까?

+0

9 번 구문이 깨졌습니다. INVENTORIES C on (A.FACILITY_ID = FACILITY_ID) 및 B.ITEM_NUMBER = C.ITEM_NUMBER)'에 참여하십시오. '및'은'join on' 절의 일부분이되어야합니까? 마지막에는 여분의 권리가 있습니다. – dg99

+0

죄송합니다, 그걸 잊어 버렸습니다. 네, 시작 괄호가 있어야합니다. 나는 여기서 실수를했고 TOAD는하지 않았다. 나는 그것을 고칠 것이다. 지적 해 주셔서 감사합니다. 이 문장은 Toad에서 실행됩니다. 그러나 그것은 나에게 엄청나게 적은 양의 레코드 나 데카르트 제품을 준다. –

+1

sqlfiddle을 설정할 수 있습니까? – terary

답변

0

어디로가는가? 이 데이터를 가져 오기 위해 프로그래밍을 사용하고 있습니까?

SELECT 
REGION_CODE, REG_DESC, WAREHOUSE_NUMBER, WAREHOUSE_FACILITY_ID, STORE_NUMBER, STORE_FACILITY_ID, 
FACILITY_ID, ITEM_NUMBER, IN_STOCK_QTY 

FROM REG_WHS_STR_ASSOC R 
INNER JOIN Inventories I ON I.FACILITY_ID = R.WAREHOUSE_FACILITY_ID OR I.FACILITY_ID = R.STORE_FACILITY_ID 
GROUP BY REGION_CODE, REG_DESC, WAREHOUSE_NUMBER, WAREHOUSE_FACILITY_ID, STORE_NUMBER, STORE_FACILITY_ID, 
FACILITY_ID, ITEM_NUMBER, IN_STOCK_QTY 

나는 그것이 당신이 찾고있는 종류라고 생각합니다. 더 많이 부숴 버리려면 하위 쿼리를 사용해야한다고 생각합니다. 그러나 이것은 당신이 주로 찾고있는 것을 얻을 것이라고 생각합니다 - 당신은 당신의 목적을 위해 좀 더 흠집 내야 만합니다.

관련 문제