Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何获取新列中前三行和后三行的总和_Sql_Sql Server_Ssms_Sql Server 2016 - Fatal编程技术网

Sql 如何获取新列中前三行和后三行的总和

Sql 如何获取新列中前三行和后三行的总和,sql,sql-server,ssms,sql-server-2016,Sql,Sql Server,Ssms,Sql Server 2016,你好,我有一个sql server内部连接 SELECT a.field_name, b.ticker AS Ticker_Name, Year(c.date) AS YEAR, c.stock_id, c.field_id, Sum(c.value) AS Value FROM field_table a INNER JOIN stock_transaction c

你好,我有一个sql server内部连接

SELECT a.field_name, 
       b.ticker     AS Ticker_Name, 
       Year(c.date) AS YEAR, 
       c.stock_id, 
       c.field_id, 
       Sum(c.value) AS Value 
FROM   field_table a 
       INNER JOIN stock_transaction c 
               ON a.id = c.field_id 
       INNER JOIN stocks b 
               ON b.id = c.stock_id 
WHERE  b.id = 230 
       AND c.field_id = 29 
GROUP  BY Year(c.date), 
          b.ticker, 
          c.stock_id, 
          c.field_id, 
          a.field_name; 
我还附上了我的输出

我的产量是全年销售额的总和。现在我的任务是在一个新列中显示三行的值之和。示例:2008年、2009年、2010年以及2011年、2012年、2013年的价值总和。然后又是2014年、2015年、2016年

我的欲望输出是

有人能告诉我如何实现这一点吗?提前谢谢

你只是想要
lag()


注意,我还将表别名替换为表的缩写。您应该使用有意义的表别名(例如缩写),而不是任意字母。

这个答案只是一个基本示例,演示了如何将每三行的值相加为结果集中的一个新列。您可以更改此选项以满足您的需要。示例使用
行数()
和整数除法计算每个组号

输入:

Year    Value   
2008    100.00  
2009    200.00  
2010    300.00  
2011    400.00  
2012    500.00  
2013    600.00  
2014    700.00  
2015    800.00  
2016    900.00  
2017    1000.00 
2018    1100.00 
声明:

-- Table
CREATE TABLE #Items (
    [Year] int,
    [Value] numeric(20, 2)
)
INSERT INTO #Items 
    ([Year], [Value])
VALUES
    (2008, 100),
    (2009, 200),
    (2010, 300),
    (2011, 400),
    (2012, 500),
    (2013, 600),
    (2014, 700),
    (2015, 800),
    (2016, 900),
    (2017, 1000),
    (2018, 1100)

-- Statement
;WITH cte AS (
    -- Generate group numbers. Each group is every tree years.
    SELECT 
        [Year], 
        [Value], 
        (ROW_NUMBER() OVER (ORDER BY [Year]) - 1) / 3 AS GroupNumber,
        ROW_NUMBER() OVER (ORDER BY [Year]) AS RowNumber
    FROM #Items
), sums AS (
    -- Get total sums for each group
    SELECT 
        SUM([Value]) AS [SumValue], 
        GroupNumber, 
        ROW_NUMBER() OVER (ORDER BY GroupNumber) AS RowNumber
    FROM cte
    GROUP BY [GroupNumber]
)
-- Final SELECT 
SELECT cte.[Year], cte.[Value], sums.[SumValue]
FROM cte
LEFT JOIN sums ON (cte.RowNumber = sums.RowNumber)
输出:

Year    Value   SumValue
2008    100.00  600.00
2009    200.00  1500.00
2010    300.00  2400.00
2011    400.00  2100.00
2012    500.00  NULL
2013    600.00  NULL
2014    700.00  NULL
2015    800.00  NULL
2016    900.00  NULL
2017    1000.00 NULL
2018    1100.00 NULL

您使用的是哪一版本的SQL Server?如何强制人们处理您的自定义模式?我使用的是SQL Server2016@Roy . . . 请编辑您的问题并显示您想要的结果。样本数据也有帮助。我已经编辑了我的问题并附上了我想要得到的结果。
Year    Value   SumValue
2008    100.00  600.00
2009    200.00  1500.00
2010    300.00  2400.00
2011    400.00  2100.00
2012    500.00  NULL
2013    600.00  NULL
2014    700.00  NULL
2015    800.00  NULL
2016    900.00  NULL
2017    1000.00 NULL
2018    1100.00 NULL