0

我有一个临时表(#WorkTable),如下所示:

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

我想要做的是用它的实际信用评级更新这个表,其中列 CreditRating 是“未分类”。因此,在上面的示例中,未分类的英国将变为“AA”,而南非的将变为“A”。

我不确定这个编码,任何帮助将不胜感激。

4

3 回答 3

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 很陌生。您需要做的是将表“加入”到查找值。您可以在很多地方找到很多关于 SQL 基础知识的帮助,但如果您需要快速解决方案,请尝试以下方法:

如果您有一个包含国家和信用评级的单独表,(我假设该表的名称是评级,并且国家名称和评级匹配。)

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

另一方面,如果不存在单独的表,并且您想根据同一个临时表更新未分类的值,那么您需要假设表中已经存在一些具有该国家/地区的 CreditRating 的条目(其中,在您发布的案例,有。)每个国家/地区也需要只有一个 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'

这使用表本身来查找值,通过查看表两次 - 一次作为要更新的表,其中最后一行将更新内容限制为仅未分类的项目,一次作为源表,其中只有分类评级用过的。如果这对您不起作用,请发表评论并提供更多详细信息。

于 2012-04-20T13:08:06.823 回答
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 英国 AA 2 英国 AA 3 南非 A 4 南非 A 5 南非 A

于 2012-04-22T15:33:25.663 回答