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数据库上执行是没有问题的,除了直接将红色临时表替换成子查询外还有没有其他方法实现?