2013-07-15 12 views
0

제가 작업중인 SQL 요청에 문제가 있습니다.바깥 쪽 바깥 쪽 적용은 모두 적용됩니까?

특정 고객이 주문한 특정 품목 번호를 반환하고 싶습니다. 문제는 다음과 같습니다. 요청을 실행할 때 두 줄 이상이 표시됩니다.

(이 코드의 이해를 돕기 위해 내 요청의 매우 단순화 된 버전이 있습니다. 내 테이블 이 아닌 같은 이름, 내 행하지도 않습니다 있습니다.를)

SELECT outerpallet.pallet as palletnbr, ID, shipmentID FROM arandomtable 
OUTER APPLY (SELECT SUM(palletnbr) as pallet FROM thepallettable GROUP BY arandomtable.ID) as outerpallet 
WHERE ID = @something 

내가 무엇을 얻을 :

palletnbr ID shipmentid 
1   2  340 
2   3  340 
3   4  340 

것은 내가 (whitout 반드시 ID와 shipmentid을 가진) 좀하고 싶습니다 무엇 :

palletnbr 
6 

이렇게하려면 모든 줄을 하나로 묶어야합니다. 나는 다른 외부 적용을하는 것을 생각했으나 작동하지 않을 것입니다. (다른 외부 적용의 외부 적용을하고 있기 때문에) ...

저는 어쩌면 내 외부를 다른 방식으로 적용하려고 생각했지만, 방법을 찾는 것처럼 보입니다. 나는 추가하려고 :

GROUP BY shipmentid 

그러나 적용이 외부에있을 것, 나는 거기에 넣어하는 방법을 알아낼 수 없습니다.

누구든지이 문제를 해결하는 데 도움이 될 아이디어가 있습니까? 작은 힌트가 큰 도움이 될 것입니다!

답변

0

좋아, 그래서 나는 고든의 대답을 약간 따라하고 싶었다. 여기 이제까지 내가 가진 동일한 질문 할 것이다 누군가가 관심을 가질 수 있다면 내가 갔다 코드입니다 :

SELECT outerpallet.pallet as palletnbr, ID, shipmentID FROM arandomtable 
--(here are all of my other join that do not affect the question) 
OUTER APPLY (SELECT SUM(palletnbr) as pallet 
FROM thepallettable 
INNER JOIN shipmenttable ON shipmenttable.shipmentid = thepallettable.shipmentid 
INNER JOIN shipmentdetail ON shipmenttable.shipmentid = shipmentable.shipmentdtlid 
GROUP BY shipmentdetail.ID) as outerpallet 
WHERE ID = @something 

이 매우 단축 및 기본 버전입니다,하지만 사람을 도움이 될 수 있습니다 갇혀있다. 기본적으로 다른 INNER JOIN을 내 OUTER APPLY에 넣었으므로 정밀도가 높아졌습니다. 물론 이것이 가장 효과적인 방법은 아니지만, 프로젝트의 작은 부분에서 사용 되었기 때문에 제 경우에는 괜찮 았습니다. 따라서 한 명 이상의 고객이 요청하지 않았을 것입니다 (이것은 우리의 고객 개인화입니다. 메인 프로그램).

대단히 감사합니다!

0

나는 당신의 쿼리가 더 복잡 할 수도 있다는 것을 알고 있습니다.

SELECT SUM(palletnbr) as palletnbr, arandomtable.ID, arandomtable.shipmentID 
FROM arandomtable left outer join 
    thepallettable 
    on thepallettable.randomID = arandomtable.ID 
WHERE arandomtable.ID = @something 
group by arandomtable.ID, arandomtable.shipmentID; 

당신이 cross apply 필요 이유가 있나요 : 질문의 버전은 cross apply와보다 join으로 응답보다 쉽게 ​​보인다?

+0

내 querry는 다음과 같이 처리됩니다. SELECT (...) arandomtable FROM INNER는 Y에서 X 가입 = Z는 INNER는 Y에서 X 가입 = Z는 INNER는 Y에서 X 가입 = Z는 INNER는 Y에서 X 가입 = Z는 INNER가 = Y = Z 좌측 X 가입 Y X에서 가입 Z 는 LEFT outerpallet 로 (arandomtable.ID BY thepallettable 그룹에서 팔레트로 SUM (palletnbr를) 선택)을 적용 Y = Z OUTER에 Z 가입 WHERE (조건) – AquaSoley

+0

그래서 외부는 내가 본 유일한 방법이 될 것입니다 적용 내가 원하는 걸 얻기 위해서. – AquaSoley