1

私は次のクエリを持っています:

select vkbr.vkID, vkbr.bid, vkbr.Date, vkbr.agID 
FROM camp c (NOLOCK)
JOIN    ag (NOLOCK) ON ag.campID = c.id
JOIN    vkbr WITH (NOLOCK) ON vkbr.agID = ag.id
where c.id = 648322
order by vkbr.vkID;

次の結果があります。

vkID        bid     Date                    agID
1072845175  NULL    2012-12-04 20:20:12.390 16074852
1072845177  0.74    2012-12-01 23:36:11.280 16074852
1072845177  0.18    2012-12-02 23:01:26.123 16074852
1072845177  0.72    2012-12-09 23:38:52.503 16074852
1072845177  0.62    2012-12-14 15:26:49.643 16074852
1072845178  2.91    2012-12-08 19:37:00.877 16074852
1072845178  0.73    2012-12-13 17:54:11.240 16074852
1072845178  2.70    2012-12-14 15:26:49.643 16074852

次の行を返すために、cteを使用してからSELECTを使用します。

1072845175  NULL    2012-12-04 20:20:12.390 16074852
1072845177  0.62    2012-12-14 15:26:49.643 16074852
1072845178  2.70    2012-12-14 15:26:49.643 16074852

with cte as
(    
select vkbr.vkID, vkbr.bid, vkbr.Date, vkbr.agID, ROW_NUMBER() OVER (PARTITION BY     vkbr.vkID ORDER BY vkbr.Date DESC) AS RowNumber
FROM camp c (NOLOCK)
JOIN ag (NOLOCK) ON ag.campID = c.id
JOIN vkbr WITH (NOLOCK) ON vkbr.agID = ag.id
where c.id = 648322
)

select vkID, bid, Date, agID
from cte
where RowNumber = 1

cteから入札を取得し、それを#tという既存の一時テーブルに挿入する必要があります。

insert into #t (bid)    
select bid
from cte
where RowNumber = 1
and #t.Date = cte.Date
and #t.agId = cte.agId
and #t.vkId = cte.vkID;

正しい行に正しい入札単価を挿入するために、これらを#tで結合する必要があります。しかし、私はこのエラーを受け取ります:

「マルチパート識別子「#t.date」はバインドされていません。」

別の一時テーブルを作成し、cteからの行をその一時テーブルに挿入してから、#tで結合することを考えていました。一時テーブルを作成せずにこれを行う他の解決策はありますか?どんな助けでも大歓迎です。

4

1 に答える 1

0

に挿入している場合でも、ステートメント#tの範囲外selectです...挿入しているのと同じテーブルに参加して、このフィルタリングを実行してみてください。

insert into #t (bid)    
select cte.bid
from cte 
join #t 
  on #t.Date = cte.Date
  and #t.agId = cte.agId
  and #t.vkId = cte.vkID;
where cte.RowNumber = 1

insertただし、?の代わりに実行したいのupdateですか?

update t
set t.bid = cte.bid
from cte 
join #t t 
  on t.Date = cte.Date
  and t.agId = cte.agId
  and t.vkId = cte.vkID;
where cte.RowNumber = 1
于 2012-12-20T22:09:33.210 に答える