当前位置: 代码迷 >> Oracle开发 >> ORDER BY会影响查询结果?解决方案
  详细解决方案

ORDER BY会影响查询结果?解决方案

热度:92   发布时间:2016-04-24 06:31:44.0
ORDER BY会影响查询结果?
ORACLE版本10G
有个项目,有表table1,表结构:
CREATE TABLE TABLE1
(
  TID  VARCHAR2(50 BYTE),
  ITEM_ID VARCHAR2(50 BYTE),
  QTY           NUMBER
)

统计数据时用到以下SQL语句查询:
SELECT tid,
       SUM (CASE
               WHEN item_id = 'A1'
                  THEN qty
               ELSE NULL
            END) qty01,
       SUM (CASE
               WHEN item_id = 'A2'
                  THEN qty
               ELSE NULL
            END) qty02,
       SUM (CASE
               WHEN item_id = 'A3'
                  THEN qty
               ELSE NULL
            END) qty03,
       SUM (CASE
               WHEN item_id = 'A4'
                  THEN qty
               ELSE NULL
            END) qty04,
            ..............
       SUM (CASE
               WHEN item_id = 'A50'
                  THEN qty
               ELSE NULL
            END) qty50
  FROM table1
  GROUP BY tid


查询结果中,有一行:
TID,QTY01,QTY02,QTY03,QTY04,QTY05,QTY06,QTY07,QTY08,QTY09,QTY10,QTY11,QTY12,QTY13,QTY14,QTY15,QTY16,QTY17,QTY18,QTY19,QTY20,QTY21,QTY22,QTY23,QTY24,QTY25,QTY26,QTY27,QTY28,QTY29,QTY30,QTY31,QTY32,QTY33,QTY34,QTY35,QTY36,QTY37,QTY38,QTY39,QTY40,QTY41,QTY42,QTY43,QTY44,QTY45,QTY46,QTY47,QTY48,QTY49,QTY50
40772990,52,,,6,,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
就是只有3个值。
但是表里这个tid有十几个值来着。。

把SQL改为:
SELECT tid,
       SUM (CASE
               WHEN item_id = 'A1'
                  THEN qty
               ELSE NULL
            END) qty01,
       SUM (CASE
               WHEN item_id = 'A2'
                  THEN qty
               ELSE NULL
            END) qty02,
       SUM (CASE
               WHEN item_id = 'A3'
                  THEN qty
               ELSE NULL
            END) qty03,
       SUM (CASE
               WHEN item_id = 'A4'
                  THEN qty
               ELSE NULL
            END) qty04,
            ..............
       SUM (CASE
               WHEN item_id = 'A50'
                  THEN qty
               ELSE NULL
            END) qty50
  FROM table1
  GROUP BY tid
  ORDER BY tid

只是加了个ORDER BY tid
查询结果中该行就变成:
TID,QTY01,QTY02,QTY03,QTY04,QTY05,QTY06,QTY07,QTY08,QTY09,QTY10,QTY11,QTY12,QTY13,QTY14,QTY15,QTY16,QTY17,QTY18,QTY19,QTY20,QTY21,QTY22,QTY23,QTY24,QTY25,QTY26,QTY27,QTY28,QTY29,QTY30,QTY31,QTY32,QTY33,QTY34,QTY35,QTY36,QTY37,QTY38,QTY39,QTY40,QTY41,QTY42,QTY43,QTY44,QTY45,QTY46,QTY47,QTY48,QTY49,QTY50
40772990,52,,,6,,20,,,,,,,,,124,610,,64,,396,,255,,1125,,,,,,,,100,,,,,116,100,24,,,,,300,,60,,,,2708

而其他行不论用哪个查询语句都全部正常。。

这可能是什么原因导致的?
------解决思路----------------------
这不科学,order只会影响查询的结果集的顺序,不可能对结果集有啥影响的
是不是开始查询的时候有数据还未提交?
------解决思路----------------------
tid是字符型的。检查下两个40772990是否是同一个,还是其中一个包含了空格之类的字符

select tid,count(1)
from table1
where tid like '%40772990%'
group by tid;
------解决思路----------------------
TID为40772990的有没有item_id重复的数据?
------解决思路----------------------
LZ 如果你的数据不涉密的话,可以把数据帖上来,有点怪。
  相关解决方案