提问人:pape 提问时间:9/9/2016 最后编辑:Arulkumarpape 更新时间:9/9/2016 访问量:103
SQL - 减法行
SQL - subtraction row
问:
我有以下疑问
SELECT VALUE
,Source1
,Source2
,DocNo
FROM myTable
它返回以下数据:
我想根据以下条件计算减法:
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
有什么想法吗?
预期结果:
答:
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)
输出:
评论
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
评论