SQLserver计算一列中其中两个不相邻数据的和
时间: 2023-11-22 15:55:05 浏览: 47
可以使用窗口函数来实现这个需求。假设要计算表中的一列 `value` 中其中两个不相邻数据的和,可以按照以下步骤进行:
1. 使用 ROW_NUMBER() 函数给每一行分配一个序号,以便后续计算间隔。
2. 使用 LAG() 函数和 LEAD() 函数分别获取当前行的前一行和后一行的值,计算当前行与前一行的间隔和当前行与后一行的间隔。
3. 使用条件语句 CASE WHEN 判断当前行是否需要参与计算,如果需要,则将当前行的值加到对应的间隔上,否则置为 0。
4. 使用 SUM() 函数计算加和结果。
具体的 SQL 语句如下:
```
SELECT SUM(CASE WHEN rn = n1 OR rn = n2 THEN value ELSE 0 END) AS result
FROM (
SELECT value, ROW_NUMBER() OVER (ORDER BY some_column) AS rn,
ABS(value - LAG(value) OVER (ORDER BY some_column)) AS diff1,
ABS(value - LEAD(value) OVER (ORDER BY some_column)) AS diff2,
(SELECT MIN(rn) FROM (
SELECT ROW_NUMBER() OVER (ORDER BY some_column) AS rn
FROM your_table
) sub WHERE rn NOT IN (rn, rn - 1, rn + 1)
) AS n1,
(SELECT MIN(rn) FROM (
SELECT ROW_NUMBER() OVER (ORDER BY some_column) AS rn
FROM your_table
) sub WHERE rn NOT IN (rn, rn - 1, rn + 1) AND rn > n1
) AS n2
FROM your_table
) subquery
```
其中,`value` 是需要计算的列名,`some_column` 是某一列可以用来排序的列名,`n1` 和 `n2` 分别表示要求的两个不相邻数据所在行的序号。可以将其替换为具体的值,或者使用子查询等方式动态获取。
注意,这个方法仅适用于 SQL Server 2012 及以上版本。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)