How to check multiple columns whether they are empty or not using mysql case

。_饼干妹妹 提交于 2019-12-08 10:39:57

问题


I have a table called purchase_hs and I have different types of level dates and different types of transport modes and quantity like below. Now my requirement is I need to consider only one level date column per row. Suppose if we have level1 and remaining all are empty then we need to add 28 days based on the transport mode (sea= 28days , air=14 days , truck = 5 days and transport mode is empty then 28 days) and display the level1 date quantity. If we have level1 date and level2 date and remaining all are empty then need to take level2 date quantity, if we have level1, level2, and level3 dates and level4 ,level5 are empty then we need to take level3 quantity and so on. For level4 and level5 dates we don't need to add any days based on transport. We need to consider transport mode only for level1,level2 and level3 dates. To achieve this below is my query, but it not working.

SELECT level1,
    level2,
    level3,
    level4,
    level5,
    trasprt Quantity,
    CASE 
        WHEN level1 != ''
            AND level2 = ''
            AND level3 = ''
            AND level4 = ''
            AND level5 = ''
            AND trasprt = 'SEA'
            THEN DATE_ADD(level1, INTERVAL 28 DAY) level1
        WHEN level1 != ''
            AND level2 != ''
            AND level3 = ''
            AND level4 = ''
            AND level5 = ''
            AND trasprt = 'AIR'
            THEN DATE_ADD(STR_TO_DATE(level2, '%d.%m.%Y'), INTERVAL 14 DAY) level2
        WHEN level1 != ''
            AND level2 != ''
            AND level3 != ''
            AND level4 = ''
            AND level5 = ''
            AND trasprt = 'TRK'
            THEN DATE_ADD(STR_TO_DATE(level3, '%d.%m.%Y'), INTERVAL 5 DAY) level3
        WHEN level1 != ''
            AND level2 != ''
            AND level3 != ''
            AND level4 != ''
            AND level5 = ''
            THEN level4
        WHEN level1 != ''
            AND level2 != ''
            AND level3 != ''
            AND level4 != ''
            AND level5 != ''
            THEN level5
        ELSE
        END
FROM purchase_hs where stock_id = '4046228100449'

Table:

+------------+------------+------------+------------+--------+----------+----------------+---------------+
| level1     | level2     | level3     | level4     | level5 | Stock Qty | transport |        StockId|
+------------+------------+------------+------------+--------+----------+----------------+---------------+
| 2015-01-17 | 15.04.2015 |            |            |        | 150.0000 | SEA            | 4046228100449 |
| 2015-02-17 | 20.01.2015 | 17.02.2015 |            |        | 150.0000 | SEA            | 4046228100450 |
| 2015-01-15 | 05.04.2015 | 05.04.2015 | 03.05.2015 |        |   2.0000 |                | 4046228100451 |
+------------+------------+------------+------------+--------+----------+----------------+---------------+

My Result table would be :If i have only level1 and level2 dates and transport mode is SEA (need to add 28 days to resulting level date)then the result would be

+------------+----------+---------------+
| level2     | StockQty | StockId       |
+------------+----------+---------------+
| 13.05.2015 | 150.0000 | 4046228100449 |
+------------+----------+---------------+

If i have only level1 date and remaining all level dates are emtpy and transport mode is AIR (need to add 14 days to resulting level date) then the result would be

+------------+----------+---------------+
| level1     | menge_pe | ean           |
+------------+----------+---------------+
| 2015-01-31 | 150.0000 | 4046228100449 |
+------------+----------+---------------+

If i have only level1 date, level2 date, level3 date and level4,level5 are empty then transport mode is TRK (need to add 5 days to resulting level date) then the result would be

+------------+----------+---------------+
| level3     | menge_pe | ean           |
+------------+----------+---------------+
| 22.02.2015 | 150.0000 | 4046228100449 |
+------------+----------+---------------+

If i have only level1 date, level2 date, level3 date and level4 are having values and level5 is (we don't need to consider 28/14/5 days based on transport mode for level4 and level5 dates) then the result would be

+------------+----------+---------------+
| level4     | menge_pe | ean           |
+------------+----------+---------------+
| 03.05.2015 | 150.0000 | 4046228100449 |
+------------+----------+---------------+

So can any one please guide me where I am doing wrong?

来源:https://stackoverflow.com/questions/29398193/how-to-check-multiple-columns-whether-they-are-empty-or-not-using-mysql-case

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!