установить значение от выбора для нескольких избранных - PullRequest
1 голос
/ 25 января 2012

У меня есть выбор, у iside select есть 2 столбца. Этот столбец должен быть заполнен от того же самого выбора, но я не хочу использовать выбор дважды для этого. Возможно ли использовать выбор 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}

Обновление. Я написал плохой пример, мне нужно установить значение BalancePrediction1 и BalancePrediction2 из 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

Ответы [ 3 ]

3 голосов
/ 25 января 2012

Вы можете обновить переменную таблицы после вставки.

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)
1 голос
/ 25 января 2012
SELECT aa AS a, aa AS b
FROM table1
WHERE quantity > 5
0 голосов
/ 25 января 2012

В одну сторону;

;with T (value) as (
    select aa from table1 where quantity > 5
)
insert into @temptable 
    select value, value from T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...