【问题标题】:Sum of a specific column in SQL Select StatementSQL Select 语句中特定列的总和
【发布时间】:2016-10-25 20:53:25
【问题描述】:

我正在创建以下 SQL 表

SELECT Nr, nu_betrag_wert AS Amount
FROM 
    (SELECT DISTINCT 
         processid, nu_betrag_wert, Nr
     FROM NU_WERTE 
     WHERE Nr <> '(Nr)' AND nu_betrag_wert is NOT NULL) AS nu_betrag

获取包含行数和金额的两列表格。

现在我想要的是在最后一行正下方的额外行中列 Amount 的总和。

我尝试了类似的方法,但没有成功:

SELECT  
    Nr, SUM(nu_betrag_wert) AS Zahlbetrag
FROM 
    (SELECT DISTINCT 
         processid, nu_betrag_wert, Nr
     FROM NU_WERTE 
     WHERE Nr <> '(Nr)' AND nu_betrag_wert is NOT NULL) AS nu_betrag
GROUP BY 
    Nr WITH ROLLUP

谁能帮帮我?

【问题讨论】:

  • 什么不起作用?
  • 我的第二个陈述没有显示任何内容!
  • 可能是GROUP BY ROLLUP (Nr);?
  • 也没有用:/
  • 您能否在 SQLfiddle 上创建包含少量条目的示例数据库?

标签: sql-server select group-by sum rollup


【解决方案1】:

我已经成功地在两个 SELECT 中使用 UNION 来生成我认为您所请求的内容 - 它在底部的单独一行中显示值列表和最终总和。

可能是这样的:

CREATE TABLE #nu_werte ( processid INT IDENTITY, nu_betrag_wert int, nr VARCHAR(10) )

INSERT INTO #nu_werte ( nr, nu_betrag_wert )
SELECT 'Gut', 1 UNION
SELECT '(Nr)', 3 UNION
SELECT 'Gut', 5 UNION
SELECT 'Tag', 6 UNION
SELECT 'Tag', 8

WITH nu_betrag ( processid, nu_betrag_wert, nr )
AS
(
  SELECT
    processid,
    nu_betrag_wert,
    nr
  FROM
    #nu_werte
  WHERE
    nr != '(Nr)' AND
    nu_betrag_wert IS NOT NULL
)

SELECT nr, nu_betrag_wert AS amount
FROM
  nu_betrag
UNION
SELECT
  NULL, SUM(nu_betrag_wert) AS amount
FROM
  nu_betrag

【讨论】:

    【解决方案2】:

    刚刚检查过:

    ;WITH NU_WERTE AS (
    SELECT DISTINCT *
    FROM (VALUES
    (1,10,'(N0)'),(2,20,'(N0)'),(3,30,'(N0)'),(4,40,'(N0)'),(5,60,'(N0)'),
    (6,11,'(N1)'),(7,22,'(N1)'),(8,33,'(N1)'),(9,44,'(N1)'),(10,NULL,'(N1)'),
    (11,NULL,'(N1)'),(12,20,'(Nr)'),(13,10,'(Nr)')
    ) as t (processid, nu_betrag_wert, Nr)
    )
    
    SELECT Nr, nu_betrag_wert AS Amount
    FROM 
        (SELECT DISTINCT 
             processid, nu_betrag_wert, Nr
         FROM NU_WERTE 
         WHERE Nr <> '(Nr)' AND nu_betrag_wert is NOT NULL) AS nu_betrag
    UNION ALL
    SELECT  
        Nr, SUM(nu_betrag_wert) AS Zahlbetrag
    FROM 
        (SELECT DISTINCT 
             processid, nu_betrag_wert, Nr
         FROM NU_WERTE 
         WHERE Nr <> '(Nr)' AND nu_betrag_wert is NOT NULL) AS nu_betrag
    GROUP BY 
        Nr WITH ROLLUP
    

    输出:

    Nr      Amount
    (N0)    10
    (N0)    20
    (N0)    30
    (N0)    40
    (N0)    60
    (N1)    11
    (N1)    22
    (N1)    33
    (N1)    44
    (N0)    160
    (N1)    110
    NULL    270
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 2017-09-26
      • 2014-12-05
      • 2013-10-10
      • 1970-01-01
      相关资源
      最近更新 更多