以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- ft中直接用sql语句查询输出数据时用临时表会查询不到数据 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=141443) |
-- 作者:happyft -- 发布时间:2019/9/29 10:40:00 -- ft中直接用sql语句查询输出数据时用临时表会查询不到数据 如下面的语句,有时就是临时查询一些数据出来用,但如果每个地方都使用子查询感觉太长,很乱,想用临时表却查询不到数据,也没提示错误 IF OBJECT_ID(\'tempdb..#temp1\') IS NOT NULL DROP TABLE #temp1; SELECT a.* INTO #temp1 FROM ( SELECT 事业部名称 , 客户 , a.产品编码 , CAST(SUM(出货金额) AS DECIMAL(18, 2)) AS 出货金额 , SUM(a.累计出货) AS 出货数量 FROM ( SELECT a.事业部名称 , a.客户 , a.产品编码 , SUM(数量) AS 累计出货 , SUM(金额) AS 出货金额 , 0 AS 退货金额 FROM ( SELECT c.事业部名称 , a.客户 , a.进出日期 , a.产品编码 , 数量 , 数量 * ISNULL(单价, 0) AS 金额 FROM ( SELECT b.收货单位 AS 客户 , b.出库日期 AS 进出日期 , a.产品编码 , 数量 FROM 销售出库明细 a INNER JOIN 销售出库单 b ON a.出库单号 = b.出库单号 UNION ALL SELECT b.收货单位 AS 客户 , b.出库日期 AS 进出日期 , a.产品编码 , 数量 FROM 其他出库明细 a INNER JOIN 其他出库单 b ON a.出库单号 = b.出库单号 WHERE 出库类别 = \'销售出货\' ) a LEFT JOIN 客户 c ON a.客户 = c.客户简称 LEFT JOIN 销售单价 d ON a.产品编码 = d.产品编码 ) a WHERE a.进出日期 >= \'2019-01-01\' AND a.进出日期 <= \'2019-09-30\' GROUP BY a.事业部名称 , a.客户 , a.产品编码 UNION ALL SELECT a.事业部名称 , a.客户 , a.产品编码 , SUM(数量) AS 累计出货 , SUM(金额) AS 出货金额 , 0 AS 退货金额 FROM ( SELECT c.事业部名称 , b.收货单位 AS 客户 , b.出库日期 AS 进出日期 , a.产品编码 , 数量 , 数量 * ISNULL(单价, 0) AS 金额 FROM 销售出库单金龙明细 a INNER JOIN 销售出库单金龙 b ON a.出库单号 = b.出库单号 LEFT JOIN 客户 c ON b.收货单位 = c.客户简称 LEFT JOIN 销售单价 d ON a.产品编码 = d.产品编码 ) a WHERE a.进出日期 >= \'2019-01-01\' AND a.进出日期 <= \'2019-09-30\' GROUP BY a.事业部名称 , a.客户 , a.产品编码 ) a GROUP BY 事业部名称 , 客户 , a.产品编码 ) a; SELECT a.* , b.品名 , b.规格 , CAST(a.出货数量 / ( SELECT SUM(出货数量) FROM #temp1 ) * 100 AS DECIMAL(18, 2)) AS 数量占比 , CAST(a.出货金额 / ( SELECT SUM(出货金额) FROM #temp1 ) * 100 AS DECIMAL(18, 2)) AS 金额占比 FROM #temp1 a LEFT JOIN dbo.产品编码 b ON b.产品编码 = a.产品编码 ORDER BY 出货金额 DESC , a.出货数量 DESC; 在foxtable中增加了个窗口,一个文本框一个查询按钮,将上述代码复制到文本框后查询不出数据,查询按钮的代码如下 Dim sql As String = e.Form.Controls("TextBox1").Value If sql > "" Then Dim cmd As New SQLCommand cmd.ConnectionName = Mydata cmd.CommandTimeOut = 300 cmd.CommandText = sql Dim dt As DataTable = cmd.ExecuteReader Tables(e.Form.name & "_Table1").DataSource = dt Tables(e.Form.name & "_Table1").AutoSizeCols End If 在上面的查询语句直接在sql数据库上执行是没有问题的,除了直接将红色临时表替换成子查询外还有没有其他方法实现? |
-- 作者:有点蓝 -- 发布时间:2019/9/29 10:45:00 -- Foxtable使用的oledb驱动不支持使用临时表返回数据。只能改为其他方式 |