日期:2014-05-17  浏览次数:20489 次

这个查询如何提高效率
本帖最后由 jzkaixin 于 2012-12-07 17:19:55 编辑
SELECT  编号,
(SELECT SUM(数量) From [数据表] a Where substring(a.编号,1,10)= b.编号) As [数量]
 From 数据表 b WHERE类别=0



一个表 表内数据如下

编号       数量    类别
WD001     100     0
WD001-1   20      1
WD001-2   80      1


我现在想循环所有类别等于0的数据

然后 提取 编号 统计 这个编号下的所有数量的和


上面  substring 结果已经出来了 但是效率特别低 很慢 有没有别的方法可以快点 

------解决方案--------------------
SELECT  编号,SUM(数量) As [数量]
   From 数据表  
WHERE 类别=0 
 group by 编号


我想知道你这个是干嘛的?substring(a.编号,1,10)= b.编号
------解决方案--------------------
不是很懂你要啥
--CREATE TABLE huang(编号 VARCHAR(10),      数量 INT,   类别 INT )
 --INSERT INTO huang 
 --SELECT 'WD001',     100 ,    0
 --UNION ALL 
 --SELECT 'WD001-1'  , 20    ,  1
 --UNION ALL 
 --SELECT 'WD001-2'   ,80  ,    1
 
 SELECT  SUM(数量) 数量差 ,
         编号
 FROM    ( SELECT    SUM(数量) 数量 ,
                     SUBSTRING(编号, 1, 5) 编号
           FROM      Huang
           WHERE     类别 = 1
           GROUP BY  SUBSTRING(编号, 1, 5)
           UNION ALL
           SELECT    -1 * 数量 ,
                     编号
           FROM      Huang
           WHERE     类别 = 0
         ) a
 GROUP BY 编号
 
 /*
 数量差         编号
 ----------- ----------
 0           WD001
 
 (1 行受影响)
 
 */