2016-10-07 5 views
1

내가이 쿼리를함으로써 당신은 볼 수 있습니다 :중첩 된 그룹 SQL Server의

SELECT 
    [LineId] 
    ,[TestPackageId] 
    ,[MaterialDescriptionId] 
    ,isnull(sum([RequestQuantity]),0) as TotalMRC 
    ,isnull(sum([QuantityDeliver]),0) TotalMIV 
    ,isnull(sum([QuantityDeliverToMember]),0) totalIMIV 
    ,isnull(sum([QuantityDeliver]),0) - isnull(sum([QuantityDeliverToMember]),0) as Warehouse 
FROM 
    [SPMS2].[dbo].[ViewMTO2] 
GROUP BY 
    [LineId], [TestPackageId], [MaterialDescriptionId] 

결과는 다음과 같습니다

lindid tp  matDes mrc miv imiv warehouse 
101973 7927 61075 2 2 0  2 
101991 8666 70721 1 1 0  1 
102052 8751 71008 48 16 0  16 
99626 8053 61075 0 0 0  0 

문제는 창고이며, 그 값이 false 국지적 인 창고입니다 값은 MaterialDescriptionId에 의해 계산되어야합니다. MaterialDescriptionId의 각 행 ([LineId], [TestPackageId], [MaterialDescriptionId])에 대해 TotalMIV-totalIMIV이 단지 계산되어야합니다. 실제 결과는

입니다.
lindid tp  matDes mrc miv imiv warehouse 
101973 7927 61075 2 2 0  2 
101991 8666 70721 1 1 0  1 
102052 8751 71008 48 16 0  16 
99626 8053 61075 0 0 0  2 

당신이 두 항목을 볼 수 있듯이 61075MaterialDescriptionId 기준으로 계산됩니다 2.because해야한다.

내 검색어에서 어떻게 처리 할 수 ​​있습니까? 여기

viewmto2 결과 (null 값이 제로이다)이다

enter image description here

당신은 창고 계산하기 위해 별도의 서브 쿼리를 사용할 수 있습니다
+0

그룹화하기 전에'ViewMTO2' 테이블의 샘플 데이터를 추가 할 수 있습니까? –

+0

@Prdp 업데이트 저장소 –

+0

''warehouse'가'matDesc'를 기반으로한다고 말하면 결과 세트가 조금 혼란 스럽습니다. 결과 집합은 3 개의 모든 필드를 기반으로하지만웨어 하우스는 1만을 기반으로하므로 사용자가 별도의 행에서 2와 2를 볼 때 해당 'matDesc'값의 "합계" 4. 실제로는 사용자에게 분명할까요? – SlimsGhost

답변

1

: 당신이 그룹화 된 창고를 계산 하위 쿼리가 필요 같은

SELECT 
    [LineId] 
    ,[TestPackageId] 
    ,[MaterialDescriptionId] 
    ,isnull(sum([RequestQuantity]),0) as TotalMRC 
    ,isnull(sum([QuantityDeliver]),0) TotalMIV 
    ,isnull(sum([QuantityDeliverToMember]),0) totalIMIV 
    ,(select isnull(sum(b.[QuantityDeliver]),0) from viewmto2 b where b.[MaterialDescriptionId] = a.[MaterialDescriptionId]) - 
    (select isnull(sum(b.[QuantityDeliverToMember]),0) from viewmto2 b where b.[MaterialDescriptionId] = a.[MaterialDescriptionId]) as Warehouse 
FROM 
    [SPMS2].[dbo].[ViewMTO2] a 
GROUP BY 
    [LineId], [TestPackageId], [MaterialDescriptionId] 
0

가 보이는 값 : MaterialDescriptionId :

SELECT 
    a.[LineId] 
    ,a.[TestPackageId] 
    ,a.[MaterialDescriptionId] 
    ,isnull(sum(a.[RequestQuantity]),0) as TotalMRC 
    ,isnull(sum(a.[QuantityDeliver]),0) TotalMIV 
    ,isnull(sum([a.QuantityDeliverToMember]),0) totalIMIV 
    ,b.Warehouse 
FROM 
    [SPMS2].[dbo].[ViewMTO2] as a 
INNER JOIN 
    (SELECT 
    MaterialDescriptionId, isnull((QuantityDeliver) - sum(QuantityDeliverToMember),0) as Warehouse 
    FROM [SPMS2].[dbo].[ViewMTO2] 
    GROUP BY MaterialDescriptionId) as b 
ON 
a.MaterialDescriptionId = b.MaterialDescriptionId 
GROUP BY 
    a.[LineId], a.[TestPackageId], a.[MaterialDescriptionId], b.Warehouse