2016-10-04 4 views
3

나는이 테이블 내부 테이블SQL의 SUM 같은 열

CREATE TABLE [dbo].[StackOverflow] 
(
    [ArticleId] [bigint] NULL, 
    [Quantity] [decimal](18, 0) NULL, 
    [Type] [smallint] NULL 
) ON [PRIMARY] 

에게이이

ArticleId  Quantity  Type 
------------- ------------ ------ 
10    50   1 
12    20   1 
10    10   1 
10    18   1 
12    5   2 
17    14   2 
10    30   2 
  • 유형 1은 그 기사가 생산 계획을 의미처럼 보이는 어떤 결과를
  • 유형 2는 해당 기사가 완료되었음을 의미합니다.

나는 나에게

출력 = 슬라이스 브루스 모든 기사의 목록을 보여줍니다 출력 쿼리 필요 - 완료를

:은 articleID : 10 예정 수량은 다음과 같습니다 (78) 완료 수량은 다음과 같습니다

(30)의 출력 = 78 - 30 =

정말 보여줄 것이 없습니다. 나는 단지 ArticleId으로 그룹화해야한다는 것을 알고있다.

SELECT 
    [ArticleId], 
    SUM(CASE WHEN [Type] = 1 THEN [Quantity] ELSE 0 END) - SUM(CASE WHEN [Type] = 2 THEN [Quantity] ELSE 0 END) AS [PlannedSubQuantityTotal] 
FROM [dbo].[StackOverflow] 
GROUP BY [ArticleId] 

아니면 - 접두사로 계획과 함께 완료 합산으로 "속임수"를 사용 :

나는 당신이 두 가지 유형의 집계 금액을 빼지하기 위해 필요한이

SELECT 
    articleid, 
    SUM(quantity) - (SELECT SUM(quantity) 
        FROM stackoverflow 
        WHERE type = 2 
         AND main.articleId = stackoverflow.articleId 
        GROUP BY articleid) 
FROM 
    stackoverflow AS main 
WHERE 
    type = 1 
GROUP BY 
    articleid 
+0

테이블 정의는 SQL Server처럼 보이므로 그에 따라 태그를 변경했습니다. –

+0

@MageeWorld가 편집을 누르십시오. –

답변

3

같은 시도

SELECT 
    [ArticleId], 
    SUM(CASE WHEN [Type] = 1 THEN [Quantity] WHEN [Type] = 2 THEN -[Quantity] ELSE 0 END) AS [PlannedSubQuantityTotal] 
FROM [dbo].[StackOverflow] 
GROUP BY [ArticleId] 
8

대소 문자를 사용할 수 있습니다.

select ArticleId , sum(case type 
         when 1 then Quantity 
         when 2 then -Quantity 
        end) Output 
from stackoverflow 
group by ArticleId