如何在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那样查询表的数目