>source

SQL Server 2012에 테이블이 있습니다. 다음 쿼리는 훌륭하게 작동합니다.

SELECT TOP 300 [ObjectID], [tbh_Objects].Title, [Quantity], [tbh_Section].Title
FROM [ECom].[dbo].[tbh_Objects] 
INNER JOIN [tbh_Section] ON tbh_Objects.SectionID = tbh_Section.SectionID 
ORDER BY tbh_Objects.AddedDate DESC

난 그냥하고 싶어합계동일한 쿼리를 유지하는 수량 열의 끝에. Group By ROLL UP에 대해 읽었지만 머리를 감쌀 수없는 것 같습니다.

누구든지 제발 도와 줄 수 있습니까?


  • 답변 # 1

    GROUP BY 및 ROLL UP은 그렇게 작동하지 않습니다.

    당신이 요구하는 것은 Excel에서 사소한 일이지만 SQL에서 합계를 얻으려면 SUM이 필요하고 SUM을 사용하려면 그룹의 일부인 모든 중복 줄을 제거해야하므로 GROUP BY가 필요합니다. 그러나 이것은 당신이 원하는 것을 패배시킵니다.유지모든 개별 라인.

    아래와 같은 것은 단지 아이디어를 제공하기 위해 창 기능없이 작동합니다. 그러나 확장이 잘되지 않으므로 빠른 수정을하는 것이 더 좋습니다. 이 경우에도 합계가 항상 맨 아래로 이동하도록 다른 열을 사용할 수 있습니다. 행 수 또는 소계 수에 따라 이것이 커질수록 창 함수로 이동하고 다양한 합계를 끝에 통합하거나 응용 프로그램/보고서에 표시하는 것이 좋습니다.

    WITH cteIndividualLines AS
    (
        SELECT TOP 300 [ObjectID], [tbh_Objects].Title, [Quantity], [tbh_Section].Title
        FROM [ECom].[dbo].[tbh_Objects] 
        INNER JOIN [tbh_Section] ON tbh_Objects.SectionID = tbh_Section.SectionID 
        ORDER BY tbh_Objects.AddedDate DESC
    ),
    cteGrandTotal AS
    (
        SELECT
            GrandTotal = SUM(Quantity)
        FROM
            cteIndividualLines
    )
    SELECT
         ObjectID
        ,Title
        ,Quantity
        ,Title
    FROM
        cteIndividualLines
    
    UNION ALL
    
    SELECT
         NULL
        ,'Grand Total'
        ,GrandTotal
        ,NULL
    FROM
         cteGrandTotal 
    
    

  • 답변 # 2

    이것은 롤업을 위해 창 함수를 사용하여 세부 쿼리와 함께 작동합니다.

    SELECT TOP 300 [ObjectID], [tbh_Objects].Title, [Quantity], [tbh_Section].Title,
    SumQuantity = SUM([Quantity]) OVER (PARTITION BY ObjectID)   
    FROM [ECom].[dbo].[tbh_Objects] 
    INNER JOIN [tbh_Section] ON tbh_Objects.SectionID = tbh_Section.SectionID 
    ORDER BY tbh_Objects.AddedDate DESC
    
    

    값을 TOP에있는 것과 정렬해야하는 경우이 쿼리가 작동합니다.

    ;WITH A AS
    (
        SELECT [ObjectID], [tbh_Objects].Title, [Quantity], [tbh_Section].Title, 
        TopValue= ROW_NUMBER() OVER(ORDER BY tbh_Objects.AddedDate)
        FROM [ECom].[dbo].[tbh_Objects] 
        INNER JOIN [tbh_Section] ON tbh_Objects.SectionID = tbh_Section.SectionID
     ) 
     SELECT 
         *,
          SumQuantity = SUM([Quantity]) OVER (PARTITION BY ObjectID) 
     FROM
         A
    WHERE
        TopValue <= 300
    
    

  • 이전 python - plotly - 마우스 커서를 올려 검색 한 값을 기반으로 텍스트 출력을 편집하는 방법은 무엇입니까?
  • 다음 output - coecients, se, p, 승산 비 및 CI를 사용하여 R에서 회귀 테이블을 작성하는 방법이 있습니까?