如何在查询结果中返回null值

时间:2014-09-20 04:51:51

标签: mysql sql

我有两个表,如stock_inwardstock_outward。我通过执行这样的连接操作得到了这个结果。

查询:

SELECT i.number, i.material_code, i.price, i.quantity, i.date, o.number, o.quantity, o.date, o.type
FROM  `stock_outward` AS o
INNER JOIN  `stock_inward` AS i ON  `o`.material_code =  `i`.material_code
AND  `o`.material_code =  '1000002'
LIMIT 0 , 30

结果:

number  materialpricequantity   date    number  quantity    date    type
OPENING 1000002 75  50  2014-09-17  TRN/1-2 10  2014-09-18  Non-Returnable
MRR/1-1 1000002 150 10  2014-09-17  TRN/1-2 10  2014-09-18  Non-Returnable
MRR/1-2 1000002 100 50  2014-09-17  TRN/1-2 10  2014-09-18  Non-Returnable
MRR/1-3 1000002 150 10  2014-09-18  TRN/1-2 10  2014-09-18  Non-Returnable
MRR/1-4 1000002 10  10  2014-09-18  TRN/1-2 10  2014-09-18  Non-Returnable
TRN/1-2 1000002 10  10  2014-09-18  TRN/1-2 10  2014-09-18  Non-Returnable

我的问题是我想在重复相同数字的地方显示null。我希望的o / p应该是这样的。

number  materialpricequantity   date    number  quantity    date    type
OPENING 1000002 75  50  2014-09-17  TRN/1-2 10  2014-09-18  Non-Returnable
MRR/1-1 1000002 150 10  2014-09-17   NULL    NULL  NULL  NULL
MRR/1-2 1000002 100 50  2014-09-17   NULL    NULL  NULL  NULL   
MRR/1-3 1000002 150 10  2014-09-18   NULL    NULL  NULL  NULL   
MRR/1-4 1000002 10  10  2014-09-18   NULL    NULL  NULL  NULL   
TRN/1-2 1000002 10  10  2014-09-18   NULL    NULL  NULL  NULL   

是否可以在columns.how中重复返回null以获取所需的输出。我的问题中存在很多语法错误。但我希望你们理解我的意图。

1 个答案:

答案 0 :(得分:0)

虽然我必须同意将这一点放在您的演示文稿中,但逻辑最有意义,有时可能不是一种选择。由于您正在使用MySql,因此您可以利用用户定义的变量:

SELECT i.number, i.material_code, i.price, i.quantity, i.date, 
  @number:=IF(@prevnumber=o.number,null,o.number) number,
  @quantity:=IF(@prevquantity=o.quantity,null,o.quantity) quantity,
  @date:=IF(@prevdate=o.date,null,o.date) date,
  @type:=IF(@prevtype=o.type,null,o.type) type,
  @prevnumber:=o.number, 
  @prevquantity:=o.quantity, 
  @prevdate:=o.date, 
  @prevtype:=o.type
FROM  `stock_outward` AS o
    INNER JOIN  `stock_inward` AS i ON  `o`.material_code =  `i`.material_code
        AND  `o`.material_code =  '1000002'
LIMIT 0 , 30