SQL Server2000中Group By产生的怪异问题
先把产生错误数据的代码写出来如下:
select convert(char(10),getdate()-1,120)as reportDate,groupID,serverID,ItemID,price,sum(quantity)as quantity,sum(total)as total,type
from(select groupID, serverID,convert(int,dbo.split(convert(char(100),memo),',',1))as ItemID,
convert(int,dbo.split(convert(char(100),memo),',',2))as price,
convert(int,dbo.split(convert(char(100),memo),',',3)) as quantity,
convert(int,dbo.split(convert(char(100),memo),',',4)) as total,
-- convert(char(10),dbo.split(convert(char(100),memo),',',5))as type
--因结构发生变化所以进行了修改20070629
Case when convert(bit,dbo.split(convert(char(100),memo),',',5))=0 then '银币'
when convert(bit,dbo.split(convert(char(100),memo),',',5))=1 then '金币'
else '非法'
End as type
from Temp_CCXY_Event
where event_type=17
)as AA
group by groupID,serverID,ItemID,price,type
order by ItemID
产生的数据会导致:
2007-07-01 1 1 1 1 1 3 银币
2007-07-01 1 1 2 2 5 75 银币
2007-07-01 1 1 3 3 5 225 银币
2007-07-01 1 1 16 16 105 315 银币
2007-07-01 1 1 17 17 2 30 银币
2007-07-01 1 1 19 19 1 100 银币
2007-07-01 1 1 31 31 1 3 银币
问题:列ItemID 与price 所有值都一样,而实际上他们的值是不同的
正确的代码:
select convert(char(10),getdate()-1,120)as reportDate,groupID,serverID,ItemID,price,sum(quantity)as quantity,sum(total)as total,type
from(select groupID, serverID,convert(int,dbo.split(convert(char(100),memo),',',1))as ItemID,
convert(smallint,dbo.split(convert(char(100),memo),',',2))as price,
convert(int,dbo.split(convert(char(100),memo),',',3)) as quantity,
convert(int,dbo.split(convert(char(100),memo),',',4)) as total,
-- convert(char(10),dbo.split(convert(char(100),memo),',',5))as type
--因结构发生变化所以进行了修改20070629
Case when convert(bit,dbo.split(convert(char(100),memo),',',5))=0 then '银币'
when convert(bit,dbo.split(convert(char(100),memo),',',5))=1 then '金币'
else '非法'
End as type
from Temp_CCXY_Event
where event_type=17
)as AA
group by groupID,serverID,ItemID,price,type
order by ItemID
产生的数据:
2007-07-01 1 1 1 3 1 3 银币
2007-07-01 1 1 2 15 5 75 银币
2007-07-01 1 1 3 45 5 225 银币
2007-07-01 1 1 16 3 105 315 银币
2007-07-01 1 1 17 15 2 30 银币
这样的数据就是对...他们所读取的原始数据是相同的..
只是我把ItemID 与price 的类型改为不同了..
ItemID 转换成 int
而 price 转换成 int 就出现数据异常,转换出smallint就没问题了.本人多这个问题感到很奇怪,..虽然我早已经数据异常的问题,但是本人希望找我造成这样出错出现的真正原因.....请各位高人告诉下小弟....是我代码的问题..还是微软的BUG,谢谢