Sql 给定VB.net代码,将多个查询合并为1
给定下面的代码,该代码基于日期范围返回第一个记录集(rs),其中包含一些值,然后在第二个记录集(rs2)中使用这些值来汇总成本。代码下面有进一步的解释:Sql 给定VB.net代码,将多个查询合并为1,sql,vb.net,Sql,Vb.net,给定下面的代码,该代码基于日期范围返回第一个记录集(rs),其中包含一些值,然后在第二个记录集(rs2)中使用这些值来汇总成本。代码下面有进一步的解释: strSQL = "SELECT job, suffix, isnull(qty_scrapped,0),isnull(qty_released,0), isnull(price,0),co_num FROM vwDashboardsQuality " strSQL &= " WHERE trans_date >=
strSQL = "SELECT job, suffix, isnull(qty_scrapped,0),isnull(qty_released,0), isnull(price,0),co_num FROM vwDashboardsQuality "
strSQL &= " WHERE trans_date >= '" & dtpStartDate.Value & "' AND trans_date <= '" & dtpEndDate.Value & "' "
rs = conn.Execute(strSQL)
While Not rs.EOF
strCONUM = Trim("" & rs("co_num").Value)
strSelectString = "SELECT ISNULL(a_cost,0) FROM jobmatl WHERE job='" & rs("job").Value & "' AND suffix = " & Format(rs("suffix").Value)
rs2 = conn.Execute(strSelectString)
While Not rs2.EOF
dblSumActualMaterialCost = dblSumActualMaterialCost + CDbl(rs2(0).Value)
rs2.MoveNext()
End While
rs2.Close()
rs2 = Nothing
rs.MoveNext()
End While
rs.Close()
rs = Nothing
strSQL=“从vwDashboardsQuality中选择作业、后缀、isnull(报废数量,0)、isnull(放行数量,0)、isnull(价格,0)、co_num”
strSQL&=“WHERE trans_date>='”&dtpstardate.Value&“'和trans_date看起来您只需要对两个查询执行内部联接即可获得一个结果集
看看这是否有效。如果有效,您可以消除第二个查询和第二个内部循环
strSQL = "SELECT d.job, d.suffix, isnull(d.qty_scrapped,0), isnull(d.qty_released,0)," _
& " isnull(d.price,0), d.co_num, ISNULL(m.a_cost,0)" _
& " FROM vwDashboardsQuality d" _
& " INNER JOIN jobmatl m" _
& " ON d.job = m.job" _
& " AND d.suffix = m.suffix" _
& " WHERE trans_date >= '" & dtpStartDate.Value & "'" _
& " AND trans_date <= '" & dtpEndDate.Value & "'"
strSQL=“选择d.job,d.suffix,isnull(d.qty\u报废,0),isnull(d.qty\u放行,0),”_
&isnull(d.price,0),d.co\u num,isnull(m.a\u cost,0)_
&“来自VWD仪表盘”_
&“内部联接jobmatl m”_
&“在d.job=m.job上”_
&“和d.suffix=m.suffix”_
&“其中trans_date>=”&dtpStartDate.Value&“_
&“从您的代码中,我看到您最后只是对满足where子句设置的条件的jobmatl.a_cost
的所有值运行一个SUM
。那么为什么不在同一个查询上执行所有操作呢?您将在结果集上节省所有不必要的迭代,您正在失去以前的CPU时间和资源
另外,在第一个查询中没有使用所有其他值,为什么要首先获取它们?我从下面的查询中删除了它们
SELECT SUM(j.a_cost)
FROM vwDashboardsQuality vDQ
INNER JOIN jobmatl j
ON vDQ.job = j.job
AND vDQ.suffix = j.suffix
WHERE vDQ.trans_date >= @startdate
AND vDQ.trans_date <= @enddate;
选择总和(j.a_成本)
来自vwDashboardsQuality vDQ
内连接jobmatl j
关于vDQ.job=j.job
和vDQ.suffix=j.suffix
其中vDQ.trans_date>=@startdate
和vDQ.trans_日期实际上它们正在被使用,我只是没有包含该代码。我的猜测是因为OP生成了一个,而您的解决方案将其剥离得太远了。好的,但这并不意味着答案是错误的,对于他的目的是获得一个查询,甚至在不迭代代码的情况下获得所需的结果是正确的。不过,谢谢你,谢谢!工作得很有魅力。。。谈论大脑冻结(我不会告诉任何人。)很高兴我能提供帮助。此外,您可以在Where子句中使用“2015-09-29”和“2015-09-30”之间的语句trans_data
,使用BETWEEN
子句时要小心,这是旧代码吗?那是阿多吗?。。
SELECT SUM(j.a_cost)
FROM vwDashboardsQuality vDQ
INNER JOIN jobmatl j
ON vDQ.job = j.job
AND vDQ.suffix = j.suffix
WHERE vDQ.trans_date >= @startdate
AND vDQ.trans_date <= @enddate;