2012-01-25 4 views
1

J'ai sélectionner, sélectionnez iside ont 2 colonne. Cette colonne doit être remplie à partir du même select, mais je ne veux pas l'utiliser deux fois pour la sélectionner. Est-il possoble utilisation sélectionnez 1 fois et après que la deuxième valeur de la colonne de réglage de la première? Exemple:Définir la valeur à partir de sélectionner pour quelques sélectionner

insert into @temptable from 
select 
a = (select aa from table1 where quantity > 5) 
b = (select aa from table1 where quantity > 5) 

j'ai besoin:

insert into @temptable from 
select 
a = (select aa from table1 where quantity > 5) 
b = {value from a} 

mise à jour. J'ai écrit mauvais exemple, je besoin de définir la valeur BalancePrediction1 et BalancePrediction2 de la balance

INSERT @tmpBalances 
     SELECT PA.ContractId AS 'ContractId', 
      Con.Name AS 'ContractName', 
      Bal.PortfolioAccountId AS 'PortfolioAccountId', 
      PA.Name AS 'PortfolioAccountName', 
      RA.GeneralId AS 'RegisterAccountGeneralId', 
      Bal.BalanceTypeId AS 'BalanceTypeId', 
      Bt.Name AS 'BalanceTypeName', 
      Bt.Type AS 'BalanceTypeType', 
      Bal.BalanceTimeType AS 'BalanceTimeType', 
      Bal.InstrumentId AS 'InstrumentId', 
      Ins.Name AS 'InstrumentName', 
      Ins.GeneralId AS 'InstrumentGeneralId', 
      (Bal.Balance - 
       (  
        SELECT COALESCE(SUM(Mov.Amount), 0) 
         FROM trd.Movements AS Mov 
        WHERE 
         Bal.InstrumentId = Mov.InstrumentId AND 
         Bal.PortfolioAccountId = Mov.PortfolioAccountId AND 
         Bal.BalanceTypeId = Mov.BalanceTypeId AND 
         Bal.BalanceTimeType = Mov.BalanceTimeType AND 
         DateDiff(DAY, @Date, Mov.Date) > 0 AND 
         -- Currency může být null a NULL = NULL nejde 
         COALESCE(Bal.CurrencyId, -1) = COALESCE(Mov.CurrencyId, -1) 
       ) 
      ) as Balance, 
      Balance AS 'BalancePrediction1', 
      Balance AS 'BalancePrediction2', 
      Bal.CurrencyId AS 'CurrencyId', 
      Ccy.Code AS 'CurrencyCode', 
      PA.PositionServiceType 'PositionServiceType', 
      Ccy.Name 'CurrencyName', 
      S.Nominal AS 'Nominal', 
      S.NominalCurrencyId AS 'NominalCurrencyId', 
      trd.GetCurrencyCode(S.NominalCurrencyId) AS 'NominalCurrencyCode' 
      FROM trd.Balances AS Bal 
      JOIN trd.PortfolioAccounts AS PA ON PA.Id = Bal.PortfolioAccountId 
      JOIN trd.Contracts AS Con ON Con.Id = PA.ContractId 
      JOIN trd.RegisterAccounts AS RA ON RA.Id = PA.RegisterAccountId 
      JOIN trd.BalanceTypes AS Bt ON Bt.Id = Bal.BalanceTypeId 
      JOIN trd.Instruments AS Ins ON Ins.Id = Bal.InstrumentId 
      LEFT OUTER JOIN trd.Currencies AS Ccy ON Ccy.Id = Bal.CurrencyId 
      LEFT JOIN trd.SecuritiesView S ON s.Id = Ins.Id AND DateDiff(d, S.ValidFrom, @Date) >= 0 AND (S.ValidTo IS NULL OR DateDiff(d, S.ValidTo, @Date) < 0) 
       AND S.InstrumentInstrumentTypePriceUnit = 1 

Répondre

3

Vous pouvez faire une mise à jour à la variable de table après l'insertion. Vous pouvez utiliser cross apply pour calculer la somme.

INSERT @tmpBalances 
     SELECT PA.ContractId AS 'ContractId', 
      Con.Name AS 'ContractName', 
      Bal.PortfolioAccountId AS 'PortfolioAccountId', 
      PA.Name AS 'PortfolioAccountName', 
      RA.GeneralId AS 'RegisterAccountGeneralId', 
      Bal.BalanceTypeId AS 'BalanceTypeId', 
      Bt.Name AS 'BalanceTypeName', 
      Bt.Type AS 'BalanceTypeType', 
      Bal.BalanceTimeType AS 'BalanceTimeType', 
      Bal.InstrumentId AS 'InstrumentId', 
      Ins.Name AS 'InstrumentName', 
      Ins.GeneralId AS 'InstrumentGeneralId', 
      (Bal.Balance - Mov.SumAmount) AS Balance, 
      (Bal.Balance - Mov.SumAmount) AS 'BalancePrediction1', 
      (Bal.Balance - Mov.SumAmount) AS 'BalancePrediction2', 
      Bal.CurrencyId AS 'CurrencyId', 
      Ccy.Code AS 'CurrencyCode', 
      PA.PositionServiceType 'PositionServiceType', 
      Ccy.Name 'CurrencyName', 
      S.Nominal AS 'Nominal', 
      S.NominalCurrencyId AS 'NominalCurrencyId', 
      trd.GetCurrencyCode(S.NominalCurrencyId) AS 'NominalCurrencyCode' 
      FROM trd.Balances AS Bal 
      JOIN trd.PortfolioAccounts AS PA ON PA.Id = Bal.PortfolioAccountId 
      JOIN trd.Contracts AS Con ON Con.Id = PA.ContractId 
      JOIN trd.RegisterAccounts AS RA ON RA.Id = PA.RegisterAccountId 
      JOIN trd.BalanceTypes AS Bt ON Bt.Id = Bal.BalanceTypeId 
      JOIN trd.Instruments AS Ins ON Ins.Id = Bal.InstrumentId 
      LEFT OUTER JOIN trd.Currencies AS Ccy ON Ccy.Id = Bal.CurrencyId 
      LEFT JOIN trd.SecuritiesView S ON s.Id = Ins.Id AND DateDiff(d, S.ValidFrom, @Date) >= 0 AND (S.ValidTo IS NULL OR DateDiff(d, S.ValidTo, @Date) < 0) 
       AND S.InstrumentInstrumentTypePriceUnit = 1 
      CROSS APPLY (SELECT COALESCE(SUM(Mov.Amount), 0) 
         FROM trd.Movements AS Mov 
         WHERE 
          Bal.InstrumentId = Mov.InstrumentId AND 
          Bal.PortfolioAccountId = Mov.PortfolioAccountId AND 
          Bal.BalanceTypeId = Mov.BalanceTypeId AND 
          Bal.BalanceTimeType = Mov.BalanceTimeType AND 
          DateDiff(DAY, @Date, Mov.Date) > 0 AND 
          -- Currency může být null a NULL = NULL nejde 
          COALESCE(Bal.CurrencyId, -1) = COALESCE(Mov.CurrencyId, -1) 
         ) Mov(SumAmount) 
0

Une façon;

;with T (value) as (
    select aa from table1 where quantity > 5 
) 
insert into @temptable 
    select value, value from T 
1
SELECT aa AS a, aa AS b 
FROM table1 
WHERE quantity > 5 
Questions connexes