2012-01-25 3 views
1

선택 했으므로 선택 항목에 2 개의 열이 있습니다. 이 열은 동일한 선택에서 채워야하지만 두 번 사용하려면 두 번 사용하지 않아야합니다. 그것 possoble 사용 선택 1 시간 후 첫 번째에서 두 번째 열 값을 설정? 예 :설정 값을 몇 가지 선택에서 선택하십시오.

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

내가이 필요합니다

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

업데이트. 나쁜 예를 썼다. 밸런스에서 예측 1과 균형 예측 2 값을 설정해야한다.

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 

답변

3

당신은 삽입 후 테이블 변수에 업데이트를 할 수 있습니다.

update @tmpBalances 
set BalancePrediction1 = Balance, 
    BalancePrediction2 = Balance 

또는 합계를 계산하려면 cross apply을 사용할 수 있습니다.

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

편도.

;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 
관련 문제