2014-10-28 96 views
1

我需要将subquery结果存储在变量中,并将其用于主查询中以节省查询的执行时间,否则我必须再次为此写入相同的subquery。下面的代码给出:如何将子查询结果存储在变量中并在主查询中使用

select DISTINCT 
convert(datetime,substring(o.TransactTime, 0,9), 112) + CONVERT(datetime, substring(o.transacttime,10,LEN(o.transacttime)), 114), 
o.clordid, 
ack.strategyid, 
o.Account, 
o.AllocAccount, 
o.symbol, 
o.price, 
ISNULL((Select Top 1 L.orderqty from order_msgs_incoming1 L where o.clordid=L.clordid and L.msg_id in (17,18,19,22,59,44) order BY L.transacttime DESC),o.orderqty) orderqty, 

o.InClOrdID, 
(SELECT ISNULL(ISNULL((Select Top 1 L.orderqty from order_msgs_incoming1 L where o.clordid=L.clordid and L.msg_id in (17,18,19,22,59,44) order BY L.transacttime DESC),o.orderqty)-sum(ex.LastShares),ISNULL((Select Top 1 L.orderqty from order_msgs_incoming1 L where o.clordid=L.clordid and L.msg_id in (17,18,19,22,59,44) order BY L.transacttime DESC),o.orderqty)) from order_msgs_incoming<TblIndx> ex where 
    o.Clordid = ex.clordid 
) RemainingQuantity 
from order_msgs_incoming1 o 
/*picking ack rows to update strategyId since StrategyId is null for 43 but populated for 46*/ 
left outer join order_msgs_incoming1 ack on o.clordid = ack.clordid and ack.msg_id=46 
where 
/*row for new order only since that contains all columns values*/ 
o.msg_id = 43 

我需要这样的

select DISTINCT 
variableValue=ISNULL((Select Top 1 L.orderqty from order_msgs_incoming1 L where o.clordid=L.clordid and L.msg_id in (17,18,19,22,59,44) order BY L.transacttime DESC),o.orderqty) orderqty, 

o.InClOrdID, 
(SELECT ISNULL(variableValue-sum(ex.LastShares),variableValue) from order_msgs_incoming<TblIndx> ex where 
    o.Clordid = ex.clordid 
) RemainingQuantity 
from order_msgs_incoming1 o 

请帮助我。

回答

0

您可以声明一个变量并使用SELECT子句为其分配一个值。然后在主查询中使用该变量。请看以下代码:

DECLARE @variableValue bit; 

SELECT @variableValue = ISNULL(
         (
         SELECT TOP 1 L.orderqty 
         FROM order_msgs_incoming1 L 
         WHERE o.clordid=L.clordid 
         AND L.msg_id in (17,18,19,22,59,44) 
         ORDER BY L.transacttime DESC 
         ) 
         ,o.orderqty 
        ) 
FROM order_msgs_incoming1 o 

SELECT DISTINCT 
@variableValue AS orderqty, 
o.InClOrdID, 
(
    SELECT ISNULL(variableValue-sum(ex.LastShares) 
    ,variableValue) 
    FROM order_msgs_incoming<TblIndx> ex 
    WHERE o.Clordid = ex.clordid 
) RemainingQuantity 
FROM order_msgs_incoming1 o 

您也可以使用下面的代码,以改变的子查询,这样就可以使用它在一个变量:

SELECT TOP 1 L.orderqty 
FROM order_msgs_incoming1 L 
INNER JOIN order_msgs_incoming1 o 
    ON o.clordid=L.clordid 
    AND L.msg_id in (17,18,19,22,59,44) 
ORDER BY L.transacttime DESC 
+0

嘿,我不走子查询结果在单独的查询中,并在其他查询中使用相同。想要将结果带入变量并在主查询中使用。 – 2014-10-28 06:28:12

+0

@NeerajDubey我不明白你的观点。你不能在一个单独的查询中得到“子查询结果”,如果它是标量,它必须在表中或变量中。我想我已经做了你想要的同样的事情。 “orderqty”列的值现在从变量“variableValue”中填充。 – Vaibhav 2014-10-28 06:54:28

相关问题