2012-04-20 9 views
0

は、私は次のような一時テーブル(#WorkTable)を持つ:更新テーブルの検索

InstrID CountryName CreditRating 
1  UK   AA 
2  UK   Unclassified 
3  South Africa A 
4  South Africa A 
5  South Africa Unclassified 

私が行うことができるようにしたいどのようなアップデートは、列の信用格付けが実際と「未分類」で、この表であります信用格付け。上の例では、未分類の英国は「AA」になり、南アフリカの国は「A」になります。

私はこれについてのコードが不明ですが、どんな助けでも大歓迎です。

答えて

0

以下のsqlスクリプトは、未分類のものを「実際の」信用格付けに更新します。私はこれが役立つことを願っています

CREATE TABLE #WorkTable 
(
    InstrID INT, 
    CountryName VARCHAR(50), 
    CreditRating VARCHAR(20) 
) 

INSERT INTO #WorkTable VALUES (1, 'UK','AA'); 
INSERT INTO #WorkTable VALUES (2, 'UK','Unclassified'); 
INSERT INTO #WorkTable VALUES (3, 'South Africa','A'); 
INSERT INTO #WorkTable VALUES (4, 'South Africa','A'); 
INSERT INTO #WorkTable VALUES (5, 'South Africa','Unclassified'); 

WITH cteUnclassified 
AS 

(
    SELECT InstrID, 
     CountryName, 
     CeditRating 

    FROM #WorkTable 
    WHERE CreditRating != 'Unclassified' 
) 


UPDATE #WorkTable 
SET CreditRating = u.CreditRating 
FROM #WorkTable wt 
    INNER JOIN cteUnclassified u 
ON wt.CountryName = u.CountryName 

WHERE wt.CreditRating = 'Unclassified' 

SELECT * 
FROM #WorkTable 

以下のクエリの結果:

InstrID COUNTRYNAME信用格付け 1英国AA 2英国AA 3南アフリカA 4南アフリカA 5南アフリカA

0

私はこの例があなたに役立つと思います。

String sql = "update table_name set CreditRating = (select unique CreditRating from table_name where CountryName = ? and CreditRating != 'classifie...') where CountryName = ? and CreditRating = 'classifie...'"; 

ここで、countryNameをパラメータとして渡すことができます。

0

あなたはSQLに新しいようです。あなたがしなければならないことは、テーブルを参照値に「結合」することです。

国と信用格付けの異なるテーブルを使用している場合(私は名前を仮定していますそのテーブルの一方で評価され、国名と評価試合。)

update #WorkTable 
    Set w.Creditrating = r.CreditRating 
    from #WorkTable w join Rating r on w.CountryName=r.CountryName 
    where w.CreditRating='Unclassified' 

、全く別々のテーブルが存在しない場合、あなたは同じ一時テーブルに基づいて分類されていない値を更新する、そしてあなたその国のCreditRatingのエントリがすでにあることを前提とする必要があります(あなたが投稿した場合はそこにあります)。また、国ごとに1つのCreditRatingだけが必要です。この場合は、次のように動作するはずです:

update #WorkTable 
    Set w.Creditrating = w2.CreditRating 
    from #WorkTable w join 
    (Select distinct CountryName, CreditRating from #WorkTable where CreditRating<>'Unclassified') w2 
     on w.CountryName=w2.CountryName 
    where w.CreditRating='Unclassified' 

これは二回表を見ることで、値を見つけるために、テーブル自体を使用しています - 一度テーブルとして更新するように、最後の行だけに更新されるものを制限した場合分類されていない項目と、分類された評価のみが使用されるソース表として一度使用されます。これはあなたのために動作しない場合は、詳細をコメントを残してください。