programing

합계가 있는 요약 행 추가

telecom 2023. 7. 14. 23:39
반응형

합계가 있는 요약 행 추가

나는 이것이 미친 것처럼 들리고 아마 이런 식으로 해서는 안 된다는 것을 알지만 나는 이런 것이 필요합니다 - 나는 레코드를 가지고 있습니다.SELECT [Type], [Total Sales] From Before

테이블 끝에 SUM을 표시하기 위해 끝에 행을 하나 더 추가합니다(이후).할 수 있을까요?

enter image description here

SQL Server 2008 이상 버전인 경우 GROUP BY 기능을 사용할 수 있습니다.

SELECT
  Type = ISNULL(Type, 'Total'),
  TotalSales = SUM(TotalSales)
FROM atable
GROUP BY ROLLUP(Type)
;

이것은 다음을 가정합니다.Type열에는 NULL을 사용할 수 없으므로 이 쿼리의 NULL은 롤업 행(총계가 있는 행)을 나타냅니다.하지만, 만약에Type열 자체에 NULL이 있을 수 있으며, 전체 행에 대한 더 적절한 유형의 회계는 @Declan_K의 답변과 같습니다. 즉, 다음 함수를 사용합니다.

SELECT
  Type = CASE GROUPING(Type) WHEN 1 THEN 'Total' ELSE Type END,
  TotalSales = SUM(TotalSales)
FROM atable
GROUP BY ROLLUP(Type)
;

SQL Server 2008+에서 사용할 강력한 그룹화/롤업 구문입니다.추측할 필요 없이 사용 중인 버전을 지정하는 데 항상 유용합니다.

SELECT 
  [Type] = COALESCE([Type], 'Total'), 
  [Total Sales] = SUM([Total Sales])
FROM dbo.Before
GROUP BY GROUPING SETS(([Type]),());

크레이그 프리드먼은 소개하는 멋진 블로그 포스트를 썼습니다.

사용해 보십시오.union all하기와 같이

SELECT [Type], [Total Sales] From Before
union all
SELECT 'Total', Sum([Total Sales]) From Before

i-one이 제안한 대로 주문에 문제가 있다면 다음과 같이 시도해 보십시오.

select [Type], [Total Sales] 
from (SELECT [Type], [Total Sales], 0 [Key] 
      From Before 
      union all 
      SELECT 'Total', Sum([Total Sales]), 1 From Before) sq 
order by [Key], Type

ROLLUP 연산자를 사용할 수 있습니다.

SELECT  CASE 
            WHEN (GROUPING([Type]) = 1) THEN 'Total'
            ELSE [Type] END AS [TYPE]
        ,SUM([Total Sales]) as Total_Sales
From    Before
GROUP BY
        [Type] WITH ROLLUP

집계 함수를 사용하지 않고 더 많은 열 값을 표시하려면GROUPING SETS대신에ROLLUP:

SELECT
  Type = ISNULL(Type, 'Total'),
  SomeIntColumn = ISNULL(SomeIntColumn, 0),
  TotalSales = SUM(TotalSales)
FROM atable
GROUP BY GROUPING SETS ((Type, SomeIntColumn ), ())
ORDER BY SomeIntColumn --Displays summary row as the first row in query result

질문에 대한 자세한 내용이 필요하지만 "유형"은 문자라는 표에서, "판매"는 거래라는 표에서 나온 것이라고 말합니다.UNION ALL을 사용할 수 있습니다.

SELECT type, COUNT(sales) "total sales"
FROM letters
GROUP BY type
UNION ALL
SELECT 'Total', COUNT(sales) "total sales"
FROM transactions

언급URL : https://stackoverflow.com/questions/17934318/add-a-summary-row-with-totals

반응형