簡體   English   中英

在 sql 查詢中獲取上個月的數據

[英]Get the data from previous month in sql query

我有每個月所有費用的數據。 例如,

我有每個月的費用表

+--------+--------+-----+--------+--------+
| Jan    | Feb    | Mar | Apr    | May    |
+--------+--------+-----+--------+--------+
| 899.20 | 0      | 0   | 0      | 899.20 |
| 439.38 | 485.29 | 0   | 0      | 482.29 |
+--------+--------+-----+--------+--------+

然后我在 output 中想要的每個月為 = '0',它將獲取上個月的數據,依此類推,直到它不等於 = '0'

這是否可以使用 oracle sql 或使用 xml。

我嘗試了下面的 oracle sql 查詢,例如我希望四月的值為 = 899.20

我用了case when condition,

case 
    when Apr = '0' then Mar
    when Mar = '0' then Feb
    when Feb = '0' then Jan
    else Apr
end

在 XML 中是 if else 條件

<?xdofx:if apr = '0' then mar
        else if mar = '0' then feb
        else if feb = '0' then jan
        else apr
end if?>

但是我知道的兩種情況都不起作用。 請幫忙

謝謝

您可以使用:

SELECT Jan,
       CASE WHEN Feb > 0 THEN Feb
            ELSE Jan END
         AS Feb,
       CASE WHEN Mar > 0 THEN Mar
            WHEN Feb > 0 THEN Feb
            ELSE Jan END
         AS Mar,
       CASE WHEN Apr > 0 THEN Apr
            WHEN Mar > 0 THEN Mar
            WHEN Feb > 0 THEN Feb
            ELSE Jan END
         AS Apr,
       CASE WHEN May > 0 THEN May
            WHEN Apr > 0 THEN Apr
            WHEN Mar > 0 THEN Mar
            WHEN Feb > 0 THEN Feb
            ELSE Jan END
         AS May
FROM   table_name

其中,對於樣本數據:

CREATE TABLE table_name ( Jan, Feb, Mar, Apr, May ) AS
SELECT 899.20,   0,    0, 0, 899.20 FROM DUAL UNION ALL
SELECT 439.38, 485.29, 0, 0, 482.29 FROM DUAL;

輸出:

 一月 | 二月 | 三月 | 四月 | 五月 -----: |  -----: |  -----: |  -----: |  -----: 899.2 |  899.2 |  899.2 |  899.2 |  899.2 439.38 |  485.29 |  485.29 |  485.29 |  482.29

db<> 在這里擺弄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM