2016-07-21 6 views
0

別のテーブルからテーブルに値を挿入する必要があります。私はまた、テーブル内の行を同時に更新するためにwhileループを使いたいと思っています。下に私の質問が表示されます。selectステートメントとwhileループを使用してテーブルに挿入

declare @id int 
select @id = 1 
while @id >=1 and @id <= 3 
begin 
INSERT INTO [dbo].[TEST] 
([ID_PRODUCT],[PRODUCTID],[PRODUCTDESC],[COUNT] 

select distinct 
ID_PRODUCT,PRODUCTID,PRODUCTDESC,@id 
from SAMPLES 

select @id = @id + 1 
end 

これは動作しますが、期待していませんでした。影響を受ける行を3行与える代わりに、影響を受ける3行が3行になります。だから、私は望む3つの代わりに9つの新しい行で終わります。私はacheiveにしたいどのような

ID_PRODUCT PRODUCTID PRODUCTDESC COUNT 
35746  136559  Desc1  1 
35747  276732  Desc2  1 
35748  259910  Desc3  1 
35746  136559  Desc1  2 
35747  276732  Desc2  2 
35748  259910  Desc3  2 
35746  136559  Desc1  3 
35747  276732  Desc2  3 
35748  259910  Desc3  3 

はこれです:

ID_PRODUCT PRODUCTID PRODUCTDESC COUNT 
    35746  136559  Desc1  1 
    35747  276732  Desc2  2 
    35748  259910  Desc3  3 

誰もがイムが間違っているのかを見ることができますか?

答えて

1

INSERT文のSELECT部分​​は常に同じレコードを返す @Idは、選択した行を変更しない、唯一のあなたは、行の3回同じリストを挿入する別の@id値

select distinct 
ID_PRODUCT,PRODUCTID,PRODUCTDESC,@id 
from SAMPLES 
0

と同じデータセットを挿入します異なる@idである。

私はあなたが実際にこれを意味推測:

;with DistinctSampleValues as 
(
    select distinct 
     ID_PRODUCT,PRODUCTID,PRODUCTDESC 
    from SAMPLES 
) 
insert into [dbo].[TEST] ([ID_PRODUCT],[PRODUCTID],[PRODUCTDESC],[COUNT]) 
select 
    ID_PRODUCT,PRODUCTID,PRODUCTDESC, 
    ROW_NUMBER() OVER(ORDER BY ID_PRODUCT) RN 
from DistinctSampleValues 

1時間は、追加の「行番号」で、すべての個別の値を挿入します。

0

あなたは近くです。 ID_PRODUCT not in Test table

declare @id int 
select @id = 1 
while @id >=1 and @id <= 3 
begin 
INSERT INTO [dbo].[TEST] 
([ID_PRODUCT],[PRODUCTID],[PRODUCTDESC],[COUNT] 

SELECT DISTINCT TOP 1 
    ID_PRODUCT, 
    PRODUCTID, 
    PRODUCTDESC, 
    @id 
from 
    SAMPLES S 
WHERE 
    S.ID_PRODUCT NOT IN 
    (
     SELECT T.ID_PRODUCT FROM [TEST] T 
    ) 

select @id = @id + 1 
end 
0

EralperとイワンStarostin両方が正解のようtop 1 and where句を追加し、それはあなたのために適切なソリューションです。

コードを正しく実行するには、WHERE句を追加する必要があります。

declare @id int 
select @id = 1 
while @id >=1 and @id <= 3 
begin 
INSERT INTO [dbo].[TEST] 
([ID_PRODUCT],[PRODUCTID],[PRODUCTDESC],[COUNT] 
select distinct 
ID_PRODUCT,PRODUCTID,PRODUCTDESC,@id 
from 
SAMPLES s 
WHERE Count = @id 
AND NOT EXISTS(SELECT 1 FROM Test t WHERE t.ID_PRODUCT = s.ID_PRODUCT 
             AND t.PRODUCTID = s.PRODUCTID) 
select @id = @id + 1 
end 
関連する問題