如何在SQL Server 2008中放置子查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在SQL Server 2008中放置子查询相关的知识,希望对你有一定的参考价值。

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

请帮助我在主查询中包含子查询的位置

要获得如下输出:

TransRId    Stock   InQty   OutQty
----------------------------------
41          700     1       1000
42          800     5       500
答案

我不确定我是否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是否是唯一的...抱歉!

以上是关于如何在SQL Server 2008中放置子查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 2005/2008 中清除查询执行统计信息

如何在 SQL Server 2008 中查看打开的连接/正在运行的查询? [复制]

如何在 SQL Server 2008 中通过单个查询更新两个表 [重复]

sql server 2008数据库中如何像oracle那样查询表的数目

如何在 sql server 2008 中编写对行到列的查询?

如何将SQL server 2008 里的查询结果导出到 Excel 表内?