0

次のような一時テーブル(#WorkTable)があります。

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

私ができるようにしたいのは、CreditRating列が「Unclassified」であるこのテーブルを実際の信用格付けで更新することです。したがって、上記の例では、未分類の英国は「AA」になり、南アフリカの例は「A」になります。

このためのコーディングがわからないので、助けていただければ幸いです。

4

3 に答える 3

0

あなたは SQL の初心者のようです。あなたがする必要があるのは、テーブルをルックアップ値に「結合」することです。多くの場所で SQL の基本に関する多くのヘルプを見つけることができますが、簡単な解決策が必要な場合は、次のことを試してください。

国と信用格付けを含む別のテーブルがある場合 (テーブルの名前は Rating であり、国名と格付けは一致すると想定しています)。

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'

これは、テーブル自体を使用して、テーブルを 2 回見て値を見つけます。使用済み。これがうまくいかない場合は、詳細をコメントに残してください。

于 2012-04-20T13:08:06.823 に答える
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 をパラメーターとして渡すことができます。

于 2012-04-20T09:06:13.193 に答える
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 CreditRating 1 UK AA 2 UK AA 3 南アフリカ A 4 南アフリカ A 5 南アフリカ A

于 2012-04-22T15:33:25.663 に答える