sql - 比较同一个sql表中两行的数据

标签 sql sql-server tsql sql-server-2008-r2

我试图找出同一个表中两行之间的差异。无法找到正确的查询。例如,我有

Year   Item      Qty    Amount 
------------------------------
2014   Shoes     500     2500 
2014   Ties      300      900 
2014   Pants     200     4000 
2015   Shoes     600     3000 
2015   Ties      200      600

我想知道从去年到今年增加(或减少)的是什么。我永远只有两年时间可以比较。查询结果应如下所示:

Items   Qty Diff   Amount Diff 
------------------------------
Shoes      100         500 
Ties    (-100)      (-300) 
Pants     Null        Null 

查询应该是什么样的?

最佳答案

如果你想包含所有的东西,那么你可以使用FULL OUTER JOIN,如果只是前一年的那个,LEFT OUTER JOIN,如果你想要那个与前一年和随后的年份,然后 INNER JOIN

SELECT
    T1.Item
    , (T2.QTY-T1.QTY) AS [QTY Diff]
    , (T2.Amount - T1.Amount) AS [Amount Diff]
FROM
    <<Table>> T1
    LEFT OUTER JOIN <<Table>> T2
        ON T1.Item=T2.Item
        AND T1.YEAR=(T2.YEAR-1);

关于sql - 比较同一个sql表中两行的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41029699/

相关文章:

sql - 多列上的 SELECT COUNT(DISTINCT...) 错误?

sql - T-SQL 输出插入子句 - 访问不在插入/删除表中的数据

sql - Microsoft SSMS 中的运行总计

mysql - 混合变量赋值和数据检索——MySQL 与 MS SQL Server

sql - 应该创建哪些索引来优化具有多个OR条件的sql查询

sql-server - SQL 服务器 : multiple counts with joins

sql-server - 没有缩进字符的 T-SQL 多行字符串

sql-server - SQL VIEW 不支持的数据类型

mysql - 如何执行受同一个表中的值限制的 mysql 查询?

mysql - 如何优化这个SELECT?