请帮助解决问题。
无法使请求正常工作,为了得到商店的商品数量,我需要从销售的商品数量中扣除所有供应商的所有产品的总和,然后将差额加上前一天 - 这将是库存的剩余部分。问题在于最后一个条件..
我现在得到的:
Q1 - 计算特定日期所有供应商的所有产品的总和。(收入)
Q2 - 计算特定日期的商品销售量。(消费)
Store_1 - 从所有供应商的所有产品的总和中扣除所售商品的数量。(差异)
Store_2 - 前一天的差异 + 差异。但这些数字计算不正确,除了第一行。(剩余部分)
如何获取正确的数据?WHERE 条件(特定日期 - 1 天?)
日期以秒为单位存储,这就是我使用日期转换器的原因。
SELECT Q1.Dat, Q1.Goods AS Q1, Q2.Goods AS Q2, Q1.Goods - Q2.Goods AS Store_1,
(CASE WHEN Q1.Dat <= '2013.01.01' THEN Q1.Goods - Q2.Goods + 330016
ELSE (Q1.Goods - Q2.Goods) + (SELECT SUM (Q1.Goods - Q2.Goods)+330016 FROM Q1, Q2
WHERE particular date – 1 day) END ) AS Store_2
FROM
(SELECT TOP 100 PERCENT CONVERT(VARCHAR, DATEADD(s, nb.TEreport.data, 25568), 102) AS Dat,
SUM(nb.TEreport.goods) AS Goods
FROM nb.TEreport INNER JOIN nb.TEprovider ON nb.TEreport.id_provider = nb.TEprovider.id
WHERE (LEFT(nb.TEprovider.name, 10) != 'FROM STORE')
AND (CONVERT(VARCHAR, DATEADD(s, nb.TEreport.data, 25568), 102) <= CONVERT(VARCHAR, GETDATE(), 102))
AND CONVERT(VARCHAR, DATEADD(s, nb.TEreport.data, 25568), 102) >= '2013.01.01'
GROUP BY CONVERT(VARCHAR, DATEADD(s, nb.TEreport.data, 25568), 102)
ORDER BY Dat ) Q1 --income
INNER JOIN
(SELECT TOP 100 PERCENT CONVERT(VARCHAR, DATEADD(s, nb.TEreport.data, 25568), 102) AS Dat,
SUM(nb.TEreport.goods) AS Goods
FROM nb.TEreport INNER JOIN nb.TEway ON nb.TEreport.id_way = nb.TEway.id
WHERE (SUBSTRING(nb.TEway.name, 5, 8) != 'TO STORE')
AND (CONVERT(VARCHAR, DATEADD(s, nb.TEreport.data, 25568), 102) <= CONVERT(VARCHAR, GETDATE(), 102))
AND CONVERT(VARCHAR, DATEADD(s, nb.TEreport.data, 25568), 102) >= '2013.01.01'
GROUP BY CONVERT(VARCHAR, DATEADD(s, nb.TEreport.data, 25568), 102)
ORDER BY Dat ) Q2 --spending
ON Q1.Dat = Q2.Dat
ORDER BY Q1.Dat
尝试使用CONVERT(VARCHAR, DATEADD(s, nb.TEreport.data, 25567), 102)其中 25567 是上一个日期
(CASE WHEN Q1.Dat <= '2013.01.01' THEN Q1.Goods - Q2.Goods + 330016
ELSE (Q1.Goods - Q2.Goods) + (SELECT SUM (Q1.Goods - Q2.Goods)+330016 FROM Q1, Q2
WHERE CONVERT(VARCHAR, DATEADD(s, nb.TEreport.data, 25567), 102) ) END ) AS Store_2
但我有一条错误消息:无效的对象名称'Q1',无效的对象名称'Q2'