SQL - 减法行

SQL - subtraction row

提问人:pape 提问时间:9/9/2016 最后编辑:Arulkumarpape 更新时间:9/9/2016 访问量:103

问:

我有以下疑问

SELECT VALUE
    ,Source1
    ,Source2
    ,DocNo
FROM myTable

它返回以下数据:

enter image description here

我想根据以下条件计算减法:

for DocNo A1
if(Source1=1 and Source2=0) VALUE 34
if(Source1=1 and Source2=0) VALUE 21
subtraction  two row 34 - 21 = 13 

有什么想法吗?

预期结果:

enter image description here

SQL 减法

评论

2赞 TheGameiswar 9/9/2016
请标记您正在使用的DBMS,并查看此处以改进问题:spaghettidba.com/2015/04/24/...
3赞 TheGameiswar 9/9/2016
也不要发布图像,花时间将它们粘贴为文本,这允许有人复制您的代码进行测试
1赞 Kannan Kandasamy 9/9/2016
条件合适吗?if(Source1=1 and Source2=0) VALUE 34 if(Source1=1 and Source2=0) VALUE 21

答:

1赞 Arulkumar 9/9/2016 #1

如果我正确理解您的问题,那么您想要的查询是:

SELECT Value, Score1, Score2, DocNo
FROM TestTable 
WHERE Score1 = 0

UNION 

SELECT MAX(Value) - MIN(Value) AS Value, 1, 1, DocNo
FROM TestTable 
WHERE Score1 = 1
GROUP BY DocNo
ORDER BY DocNo, Score1

DEMO为了同样。

0赞 Unnikrishnan R 9/9/2016 #2

如果您使用的是 QL server 2012 或更高版本,则可以使用 LEAD() 功能。

WITH cte_1
AS
(SELECT VALUE, 
        VALUE-LEAD(VALUE) OVER(PARTITION BY DocNo ORDER BY DocNo) Result,
       Source1, 
       Source2,
       LEAD(Source1) OVER(PARTITION BY DocNo ORDER BY DocNo) NxtSource1,
       LEAD(Source2) OVER(PARTITION BY DocNo ORDER BY DocNo) NxtSource2,
       DocNo   
     FROM #myTable)
SELECT Case WHEN (Source1=1 AND NxtSource1=1) AND (Source2=0 AND NxtSource2=1) THEN Result ELSE VALUE END as Value,
       Source1,Source2,DocNo
FROM cte_1
WHERE (Source1<>1 OR source2 <>1)

输出:

enter image description here

评论

0赞 9/9/2016
窗口函数并非特定于 SQL Server。它们也可用于 Postgres、Oracle、DB2、Firebird 和其他几个 DBMS。
0赞 Unnikrishnan R 9/9/2016
哦。。还行。。我以为用户忘记标记相应的数据库。因此,SQL标签本身就代表窗口函数。我已经发布了其他一些问题的答案,这些问题没有适当的RDMS标签..:)无论如何感谢您的信息。我会牢记在心的。
0赞 9/9/2016
该标记用于与查询语言 SQL 相关的问题。术语“SQL”并不表示任何特殊的数据库系统。询问 SQL 相关问题的人应该为他们使用的 DBMS 添加一个标签。他们甚至会收到一个弹出窗口,告诉他们这一点 - 但不幸的是,并不是每个人都阅读或遵循该准则。sql