Sql server 如何在SQLServer2008中放置子查询
我有一个主SQL查询,它返回日期介于之间的库存数量,我还需要返回日期为的库存以及日期之间的结果 主要查询:Sql server 如何在SQLServer2008中放置子查询,sql-server,sql-server-2008,subquery,Sql Server,Sql Server 2008,Subquery,我有一个主SQL查询,它返回日期介于之间的库存数量,我还需要返回日期为的库存以及日期之间的结果 主要查询: SELECT TT.TranRId, MAX(TT.TInQty) AS InQty, MAX(TT.TOutQty) AS OutQty FROM TReg TR, TTrans TT WHERE TR.TRegId = TT.TrRegId AND TT.Stid = 2 AND TR.TransDate BETWEEN '2018-08-2
SELECT
TT.TranRId, MAX(TT.TInQty) AS InQty, MAX(TT.TOutQty) AS OutQty
FROM
TReg TR, TTrans TT
WHERE
TR.TRegId = TT.TrRegId
AND TT.Stid = 2
AND TR.TransDate BETWEEN '2018-08-25' AND '2018-08-28'
GROUP BY
TT.TranRId
ORDER BY
TT.TranRId
子查询:
(SELECT TT.TransRId, (SUM(TT.TInQty) - SUM(TT.TOutQty))
FROM TTrans TT, TReg TR
WHERE TR.TransDate <= '2018-08-24'
AND TR.TRegId = TT.TrRegId
AND TT.Stid = 2 GROUP BY TT.TranRId) --AS Stock
我不确定我是否100%地理解了你的问题,如果你只是想把它作为一个子查询,那么下面的逻辑应该是可行的
SELECT TT.TranRId
,MAX(TT.TInQty) AS InQty
,MAX(TT.TOutQty) AS OutQty
,Stock.[Sum]
FROM TReg TR
LEFT JOIN TTrans TT
ON TR.TRegId = TT.TrRegId
LEFT JOIN (
SELECT TT.TransRId
,(SUM(TT.TInQty) - SUM(TT.TOutQty)) as Sum
FROM TTrans TT
LEFT JOIN TReg TR
ON TR.TRegId = TT.TrRegId
WHERE TR.TransDate <= '2018-08-24'
AND TT.Stid = 2
GROUP BY TT.TranRId
) AS Stock
ON Stock.TranRId = TT.TranRId
WHERE TT.Stid = 2
AND TR.TransDate BETWEEN '2018-08-25' AND '2018-08-28'
GROUP BY TT.TranRId
ORDER BY TT.TranRId
编辑:
我注意到tt.TranRId和tt.Tran***s***RId如果这不是一个打字错误,它将需要更正,如果不是,我的答案将不适用于您
如果您需要特定的日期,包括连接逻辑中的日期以及ID,将为您提供适当的结果…在不知道您的数据集的情况下,我不确定TranRId是否唯一…对此表示抱歉 -25年前,在ANSI-92 SQL标准中,旧样式的逗号分隔表列表样式被正确的ANSI连接语法所取代,它的使用不鼓励DHI,欢迎使用SO。除了以上准确的建议,如果我们有更多的细节来帮助您找到答案,这将是非常有帮助的。这是一个很好的起点。你想实现什么?运行总数?@Rennick感谢您的建议,这对我帮助很大,很抱歉延迟回复
SELECT TT.TranRId
,MAX(TT.TInQty) AS InQty
,MAX(TT.TOutQty) AS OutQty
,Stock.[Sum]
FROM TReg TR
LEFT JOIN TTrans TT
ON TR.TRegId = TT.TrRegId
LEFT JOIN (
SELECT TT.TransRId
,(SUM(TT.TInQty) - SUM(TT.TOutQty)) as Sum
FROM TTrans TT
LEFT JOIN TReg TR
ON TR.TRegId = TT.TrRegId
WHERE TR.TransDate <= '2018-08-24'
AND TT.Stid = 2
GROUP BY TT.TranRId
) AS Stock
ON Stock.TranRId = TT.TranRId
WHERE TT.Stid = 2
AND TR.TransDate BETWEEN '2018-08-25' AND '2018-08-28'
GROUP BY TT.TranRId
ORDER BY TT.TranRId