救急,请高手指点一下。谢谢
dataset dst中有selecttable表有行数据,进退货表,销售管理表,库存变动表,商品调拨表里有行数据(主要每个编码查询这表花时间),查询selecttable表中每个编码在其他个表中相同编码的数量。下面的做法查询selecttable表中行就要分钟,效率太低。请问该怎么优化?谢谢
for (int i = 0; i < selecttable.Rows.Count; i++)
{
DataRow row = selecttable.Rows[i];
object ret1, ret2;
if (dst.Tables["进退货"].Rows.Count > 0)
{
liename = "尺码" + row[7];
ret1 = dst.Tables["进退货"].Compute("sum(" + liename + ")", "编码='" + row[0] + "' and 数量>0 and 日期>'" + date2 + "'");
num1 = (DBNull.Value == ret1 ? 0 : Convert.ToInt32(ret1));
ret2 = dst.Tables["进退货"].Compute("sum(" + liename + ")", "编码='" + row[0] + "' and 数量>0 and 日期>='" + date1 + "' and 日期<='" + date2 + "'");
num11 = (DBNull.Value == ret2 ? 0 : Convert.ToInt32(ret2));
ret1 = dst.Tables["进退货"].Compute("sum(" + liename + ")", "编码='" + row[0] + "' and 数量<0 and 日期>'" + date2 + "'");
ret2 = dst.Tables["进退货"].Compute("sum(" + liename + ")", "编码='" + row[0] + "' and 数量<0 and 日期>='" + date1 + "' and 日期<='" + date2 + "'");
num5 = (DBNull.Value == ret1 ? 0 : Convert.ToInt32(ret1));
num55 = (DBNull.Value == ret2 ? 0 : Convert.ToInt32(ret2));
}
if (dst.Tables["商品调拨"].Rows.Count > 0)
{
ret1 = dst.Tables["商品调拨"].Compute("sum(调拨数量)", "编码='" + row[0] + "' and 调拨部门='" + bumen + "' and 调拨时间>'" + date2 + "'");
ret2 = dst.Tables["商品调拨"].Compute("sum(调拨数量)", "编码='" + row[0] + "' and 调拨部门='" + bumen + "' and 调拨时间>='" + date1 + "' and 调拨时间<='" + date2 + "'");
num4 = (DBNull.Value == ret1 ? 0 : Convert.ToInt32(ret1));
num44 = (DBNull.Value == ret2 ? 0 : Convert.ToInt32(ret2));
ret1 = dst.Tables["商品调拨"].Compute("sum(调拨数量)", "编码='" + row[0] + "' and 所属部门='" + bumen + "' and 调拨时间>'" + date2 + "'");
ret2 = dst.Tables["商品调拨"].Compute("sum(调拨数量)", "编码='" + row[0] + "' and 所属部门='" + bumen + "' and 调拨时间>='" + date1 + "' and 调拨时间<='" + date2 + "'");
num8 = (DBNull.Value == ret1 ? 0 : Convert.ToInt32(ret1));
num88 = (DBNull.Value == ret2 ? 0 : Convert.ToInt32(ret2));
}
dataset dst中有selecttable表有行数据,进退货表,销售管理表,库存变动表,商品调拨表里有行数据(主要每个编码查询这表花时间),查询selecttable表中每个编码在其他个表中相同编码的数量。下面的做法查询selecttable表中行就要分钟,效率太低。请问该怎么优化?谢谢
for (int i = 0; i < selecttable.Rows.Count; i++)
{
DataRow row = selecttable.Rows[i];
object ret1, ret2;
if (dst.Tables["进退货"].Rows.Count > 0)
{
liename = "尺码" + row[7];
ret1 = dst.Tables["进退货"].Compute("sum(" + liename + ")", "编码='" + row[0] + "' and 数量>0 and 日期>'" + date2 + "'");
num1 = (DBNull.Value == ret1 ? 0 : Convert.ToInt32(ret1));
ret2 = dst.Tables["进退货"].Compute("sum(" + liename + ")", "编码='" + row[0] + "' and 数量>0 and 日期>='" + date1 + "' and 日期<='" + date2 + "'");
num11 = (DBNull.Value == ret2 ? 0 : Convert.ToInt32(ret2));
ret1 = dst.Tables["进退货"].Compute("sum(" + liename + ")", "编码='" + row[0] + "' and 数量<0 and 日期>'" + date2 + "'");
ret2 = dst.Tables["进退货"].Compute("sum(" + liename + ")", "编码='" + row[0] + "' and 数量<0 and 日期>='" + date1 + "' and 日期<='" + date2 + "'");
num5 = (DBNull.Value == ret1 ? 0 : Convert.ToInt32(ret1));
num55 = (DBNull.Value == ret2 ? 0 : Convert.ToInt32(ret2));
}
if (dst.Tables["商品调拨"].Rows.Count > 0)
{
ret1 = dst.Tables["商品调拨"].Compute("sum(调拨数量)", "编码='" + row[0] + "' and 调拨部门='" + bumen + "' and 调拨时间>'" + date2 + "'");
ret2 = dst.Tables["商品调拨"].Compute("sum(调拨数量)", "编码='" + row[0] + "' and 调拨部门='" + bumen + "' and 调拨时间>='" + date1 + "' and 调拨时间<='" + date2 + "'");
num4 = (DBNull.Value == ret1 ? 0 : Convert.ToInt32(ret1));
num44 = (DBNull.Value == ret2 ? 0 : Convert.ToInt32(ret2));
ret1 = dst.Tables["商品调拨"].Compute("sum(调拨数量)", "编码='" + row[0] + "' and 所属部门='" + bumen + "' and 调拨时间>'" + date2 + "'");
ret2 = dst.Tables["商品调拨"].Compute("sum(调拨数量)", "编码='" + row[0] + "' and 所属部门='" + bumen + "' and 调拨时间>='" + date1 + "' and 调拨时间<='" + date2 + "'");
num8 = (DBNull.Value == ret1 ? 0 : Convert.ToInt32(ret1));
num88 = (DBNull.Value == ret2 ? 0 : Convert.ToInt32(ret2));
}
编码 颜色 尺码1 尺码2 尺码3
111 红色 5 5 5
111 白色 3 4 6进退货表结构
编码 颜色 尺码 数量 日期
111 红色 尺码1 3 2009-10-09
111 红色 尺码2 5 2009-10-09
111 白色 尺码1 3 2009-10-09商品调拨表结构
编码 颜色 尺码 数量 日期
111 红色 尺码1 3 2009-10-09
111 红色 尺码2 5 2009-10-09
111 白色 尺码1 3 2009-10-09要查询selecttable表中111红色尺码1,111红色尺码2,111白色尺码1,111白色尺码2 一段时间 分别在进退货表,商品调拨表中的数量,各数量查询结果再装入一个统计表中该怎么操作呀?
-- “各数量查询结果再装入一个统计表中该怎么操作呀?”不知道你要的是不是合计表,所以我把他
--们用UNION ALL连起来了,并且做了一个合计,如果不是这个意思的话,在给你修改下。
--下面是SQL语句SELECT 编码,颜色,尺码,SUM(数量) AS 数量 FROM 进退货表结构 WHERE 日期>='2009-10-9' and 日期<='2009-10-9' GROUP BY 编码,颜色,尺码,日期
UNION ALL
SELECT null,'进退货表合计','',SUM(数量) AS 数量 FROM 进退货表结构 WHERE 日期>='2009-10-9' and 日期<='2009-10-9' GROUP BY 日期
UNION ALL
SELECT 编码,颜色,尺码,SUM(数量) AS 数量 FROM 商品调拨表结构 WHERE 日期>='2009-10-9' and 日期<='2009-10-9' GROUP BY 编码,颜色,尺码,日期
UNION ALL
SELECT null,'商品调拨表合计','',SUM(数量) AS 数量 FROM 商品调拨表结构 WHERE 日期>='2009-10-9' and 日期<='2009-10-9' GROUP BY 日期
---我查询的结果
编码 颜色 尺码 数量
111 白色 尺码1 3
111 红色 尺码1 3
111 红色 尺码2 5
NULL 进退货表合计 11
111 白色 尺码1 3
111 红色 尺码1 3
111 红色 尺码2 5
NULL 商品调拨表合计 11
要先查询出selecttable表中数据,
111红色尺码1,111红色尺码2,111红色尺码3,111红色尺码4。(查尺码1,尺码2,尺码3的数量)
111白色尺码1,111白色尺码2,111白色尺码3,111白色尺码4。(selecttable表第二行查尺码1,尺码2,尺码3的数量)上面selecttable表中2行就需要查询8个结果
然后这8个结果再循环查询分别在进退货表,商品调拨表中的数量,各数量查询结果再装入一个统计表中该怎么操作呀?
期初=selecttable表数量+商品调拨数量-进退货数量
期末=selecttable表数量
统计表
编码 颜色 尺码 期初 进退货 商品调拨 期末
111 红色 尺码1 2 3 4 1
111 红色 尺码2 2 3 4 1
111 红色 尺码3 2 3 4 1
111 红色 尺码4 2 3 4 1
111 白色 尺码1 2 3 4 1
111 白色 尺码2 2 3 4 1
111 白色 尺码3 2 3 4 1
111 白色 尺码4 2 3 4 1
这是selecttable表中2行得的结果