更新表查找

时间:2012-04-20 08:58:05

标签: tsql

我有一个临时表(#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'。

我不确定这方面的编码,我们将非常感谢任何帮助。

3 个答案:

答案 0 :(得分: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作为参数传递。

答案 1 :(得分: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'

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

答案 2 :(得分: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