Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在SQLServer2008中放置子查询_Sql Server_Sql Server 2008_Subquery - Fatal编程技术网

Sql server 如何在SQLServer2008中放置子查询

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

我有一个主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-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