首页 > 解决方案 > 如何在sql中获取列值比较?

问题描述

我有一张如下表。该表包含一年中每一天的产品价格。我想逐年获得每天的价格变化。

Product   Year    1Jan     2Jan .................... 31Dec
A         2018    10       20   .................... 120
A         2019    130      150  .................... 200 
B         2018    15       23   .................... 90
B         2019    113      130  .................... 220

我想按顺序将列与年份重叠进行比较,并获得如下输出。

• 对于 2018 年,通过从 1 月 1 日(1 月 2 日至 1 月 1 日)否定 2 Jan 的值,我们得到 2 Jan 的新值。

• 对于 2018 年,通过从 1 月 2 日(1 月 3 日至 1 月 2 日)否定 3Jan 的值,我们得到新的 3 Jan 值。

• 对于 2018 年,通过从 12 月 30 日(12 月 31 日至 12 月 30 日)否定 31Dec 的值,我们得到 12 月 31 日的新值

• 现在,对于 2019 年,通过从 1 月 1 日(2019 年)否定 31 Dec(2018 年)的值,我们得到 2019 年 1 月 1 日的新值

因此,简而言之,列的值是其值与前一天值的差值。

Product   Year    1Jan     2Jan .................... 31Dec
A         2018    10       10   .................... 15       (just assume value of 30Dec column is 105)
A         2019    10       20   .................... 10       (just assume value of 30Dec column is 190)
B         2018    15       8    .................... 8        (just assume value of 30Dec column is 82)
B         2019    23       17   .................... 10       (just assume value of 30Dec column is 210)

如果事情不清楚,请告诉我。

标签: sqlsql-servertsql

解决方案


虽然在逻辑上这个查询没有任何内容,但你仍然需要努力编写它 -

SELECT Product
      ,Year
      ,1Jan
      ,2Jan - 1Jan 2Jan
      ,3Jan - 2Jan 3Jan
      .
      .
      .
      ,31Dec - 30Dec 31Dec
FROM YOUR_TAB
ORDER BY Product
        ,Year;

推荐阅读