进一步理解此查询

时间:2013-09-10 12:59:33

标签: mysql

所有

通过大量研究,我设法让以下查询起作用,但是我并不完全理解它在做什么。我现在需要稍微调整一下,因此需要更彻底地理解它。

查询在几个表中查找以提供结果列表,每组结果一行,而不是每个结果有一行(这将有太多重复的信息)

查询是: -

SELECT od_date, tbl_order.od_id, tbl_order_item.od_item_id, pd_code, item_code, pd_name, >cust, pd_type, tbl_order_item.od_item_id, tbl_order_item.test_suite_name,
MAX( IF( tbl_lab_item.test_name = 'Test 1', tbl_lab_item.test_result, NULL ) ) AS TEST1,
MAX( IF( tbl_lab_item.test_name = 'Test 2', tbl_lab_item.test_result, NULL ) ) AS TEST2,
MAX( IF( tbl_lab_item.test_name = 'Test 3', tbl_lab_item.test_result, NULL ) ) AS TEST3,
MAX( IF( tbl_lab_item.test_name = 'Test 4', tbl_lab_item.test_result, NULL ) ) AS TEST4,
MAX( IF( tbl_lab_item.test_name = 'Test 5', tbl_lab_item.test_result, NULL ) ) AS TEST5,
MAX( IF( tbl_lab_item.test_name = 'Test 6', tbl_lab_item.test_result, NULL ) ) AS TEST6
FROM tbl_item 
INNER JOIN tbl_item ON tbl_lab_item.od_item_id = tbl_item.od_item_id
INNER JOIN tbl_order ON tbl_order.od_id = tbl_item.od_id
WHERE tbl_order.od_date LIKE  '%$orderDate%'
AND customer_id = '%custID%'
GROUP BY tbl_lab_item.od_item_id

这给我以下输出: -

Order Date | Order ID | Item Id | <snip - other columns> | TEST1 | TEST2 | TEST 3 ...etc
09/09/2013 |    2     |    1    |                        | 10    | 20    | 30  ...etc

我现在要做的是显示任何小于50的结果为'&lt; 50'而不是显示实际数字。同上'&gt; 100'。

我不确定如何将此逻辑添加到上述查询中,或者甚至是否可能。

非常感谢您提供的任何帮助。

非常感谢, 杰森

2 个答案:

答案 0 :(得分:0)

尝试使用您需要检查的每个列的大小写 像

这样的东西
case 
    when  result <50 then '<50'
    when  result > 100 then '..'
end

答案 1 :(得分:0)

看起来您希望将现有查询包装到另一个查询中,例如......

select
      PQ.*,
      case when PQ.Test1 IS NULL then '     '
           when PQ.Test1 < 50 then '< 50'
           when PQ.Test1 > 100 then '> 100'
           else PQ.Test1 end as FinalTest1,
      case when PQ.Test2 IS NULL then '     '
           when PQ.Test2 < 50 then '< 50'
           when PQ.Test2 > 100 then '> 100'
           else PQ.Test2 end as FinalTest2,
      case when PQ.Test3 IS NULL then '     '
           when PQ.Test3 < 50 then '< 50'
           when PQ.Test3 > 100 then '> 100'
           else PQ.Test3 end as FinalTest3,
      case when PQ.Test4 IS NULL then '     '
           when PQ.Test4 < 50 then '< 50'
           when PQ.Test4 > 100 then '> 100'
           else PQ.Test4 end as FinalTest4,
      case when PQ.Test5 IS NULL then '     '
           when PQ.Test5 < 50 then '< 50'
           when PQ.Test5 > 100 then '> 100'
           else PQ.Test5 end as FinalTest5,
      case when PQ.Test6 IS NULL then '     '
           when PQ.Test6 < 50 then '< 50'
           when PQ.Test6 > 100 then '> 100'
           else PQ.Test6 end as FinalTest6
   from
      ( Your Full Query ) as PQ

每条评论的后续行动

如果您的查询获得任何记录,那么我的版本也应该如此。从您的原始查询处理列重命名,我会调整

MAX( blah blah ) AS TEST1,

MAX( blah blah ) AS preTEST1,

列Test2-6相同

然后,从

更改我的上述查询
  case when PQ.preTest1 IS NULL then '     '
       when PQ.preTest1 < 50 then '< 50'
       when PQ.preTest1 > 100 then '> 100'
       else PQ.preTest1 end as Test1,
等等2-6。原始查询的其余部分保持不变,否则......仍然依赖于查询的结果。您还可以编辑现有帖子并将修改后的查询放在那里供我查看。如果内部部分查询没有返回任何内容,那么我的外部查询也不会。