2016-05-04 12 views
2

これは私の最初の投稿です。私は、次のようなテーブルを持っている:重複したデータに基づく値の追加

client ; cost 
Paula ; 100 
Paula ; 50 
Jacob ; 300 
Paula ; 120 

私はそこに重複しなかった場合、または値は1になります別の列「クライアント2」を追加したい、それを複製していた場合はすべき1のみ最大と重複のためにコスト:so:

client ; cost ; client2 
Paula ; 100 ; 0 
Paula ; 50 ; 0 
Jacob ; 40 ; 1 
Paula ; 120 ; 1 

実際の表には2000件のレコードがあります。どのようにSQL Serverに書き込む必要がありますか?事前のおかげで、 ポーラ

+0

同じコストで重複があったらどうすればいいのでしょうか? – cableload

答えて

4
WITH CTE AS 
    (SELECT 
     client, 
     cost, 
     ROW_NUMBER() OVER (PARTITION BY client ORDER BY cost DESC) AS RowNo 
    FROM 
     table) 
SELECT 
    client, 
    cost, 
    CASE RowNo 
     WHEN 1 THEN 1 
     ELSE 0 
    END AS client2 
FROM 
    CTE; 
0

あなたはcursorでこれを行うことができます。以下の例は、あなたが望むものを処理する必要があります。 #tableをテーブルの名前に置き換える必要があります。醜いですが、罪として醜いですが、それは動作します;)

CREATE TABLE #Table 
(
    client NVARCHAR(100), 
    cost int, 
    client1 int 
); 

INSERT INTO #Table 
VALUES 
('Paula',100,null), 
('Paula',50,null), 
('Jacob',300,null), 
('Paula',120,null); 

DECLARE @clientColumn nvarchar(100); 
DECLARE @Dup int; 

DECLARE client_cursor CURSOR FOR 
SELECT client,cost FROM #Table ORDER BY client,cost 

OPEN client_cursor; 
FETCH NEXT FROM client_cursor INTO @clientColumn 

WHILE @@FETCH_STATUS=0 
BEGIN 

set @dup = (SELECT TOP 1 cost FROM #Table WHERE client = @clientColumn GROUP BY client ORDER BY cost desc) 

UPDATE #Table 
SET 
    client1 = 1 
WHERE client = @clientColumn AND cost = @dup  

FETCH NEXT FROM client_cursor INTO @clientColumn 
END 
CLOSE client_cursor 
DEALLOCATE client_cursor; 

UPDATE #Table 
SET 
    client1 = 0 
    WHERE client1 IS NULL 

SELECT * FROM #Table 
関連する問題