2016-10-11 48 views
1

我需要帮助,在现有的临时表更新我的专栏之一,每次的指标之一是> = 4SQL服务器:从表更新列,如果记录的一个> = X

下面是我的查询我正在努力:

DECLARE @Met NVARCHAR(MAX) 
SET @Met = 'MET' 

DECLARE @NotMet NVARCHAR(MAX) 
SET @NotMet = 'NOT MET' 

UPDATE #TmpTbl 
SET Score_Oct = (CASE 
        WHEN ([Type] LIKE '%Metric%') AND CAST(Score_Oct AS INT) >= 4 
         THEN @NotMet 
         ELSE @Met 
       END), 
    Score_Nov = (CASE 
        WHEN ([Type] LIKE '%Metric%') AND CAST(Score_Nov AS INT) IN (4, 5, 6) 
         THEN @NotMet 
         ELSE @Met 
       END), 
    Score_Dec = (CASE 
        WHEN ([Type] LIKE '%Metric%') AND Score_Dec IN ('4', '5', '6') 
         THEN @NotMet 
         ELSE @Met 
       END), 
    Score_Jan = (CASE 
        WHEN ([Type] LIKE '%Metric%') AND Score_Jan IN ('4', '5', '6') 
         THEN @NotMet 
         ELSE @Met 
       END), 
    Score_Feb = (CASE 
        WHEN ([Type] LIKE '%Metric%') AND Score_Feb IN ('4', '5', '6') 
         THEN @NotMet 
         ELSE @Met 
       END) 
    ,Score_Mar = (CASE WHEN ([Type] LIKE '%Metric%') AND Score_Mar  IN ('4','5','6') THEN @NotMet ELSE @Met END) 
    ,Score_Apr = (CASE WHEN ([Type] LIKE '%Metric%') AND Score_Apr  IN ('4','5','6') THEN @NotMet ELSE @Met END) 
    ,Score_May = (CASE WHEN ([Type] LIKE '%Metric%') AND Score_May  IN ('4','5','6') THEN @NotMet ELSE @Met END) 
    ,Score_Jun = (CASE WHEN ([Type] LIKE '%Metric%') AND Score_Jun  IN ('4','5','6') THEN @NotMet ELSE @Met END) 
    ,Score_Jul = (CASE WHEN ([Type] LIKE '%Metric%') AND Score_Jul  IN ('4','5','6') THEN @NotMet ELSE @Met END) 
    ,Score_Aug = (CASE WHEN ([Type] LIKE '%Metric%') AND Score_Aug  IN ('4','5','6') THEN @NotMet ELSE @Met END) 
    ,Score_Sep = (CASE WHEN ([Type] LIKE '%Metric%') AND Score_Sep  IN ('4','5','6') THEN @NotMet ELSE @Met END) 
WHERE 
    Metric = 'Balance Scorecard' 

我一直在尝试不同的组合(铸造,治疗领域INT,文字等),但无济于事。有什么我错过了吗?

下面是结果集:

Metric    Type     Result_Oct Score_Oct Result_Nov  Score_Nov 
AA     1.Monthly Metric  3    3   NULL   NULL 
BB     1.Monthly Metric  292   3   300    3 
CC     1.Monthly Metric  3    3   NULL   NULL 
DD     2.Half Yearly Metric 70   3   NULL   NULL 
EE     2.Half Yearly Metric 100   1   67    4 
Balance Scorecard 3.Accountability  NULL   MET   NULL   MET 

资产负债Scoredcard应该是“不符合”的“Score_nov”为EE度量> = 4,但它似乎是一个查询不能承认的数字。是否因为字段为空?

+0

你能提供一些示例源数据? – iamdave

回答

2

问题是这些值在不同的。所以,你需要一个JOIN把它们放在一起。

下面是于11月示例中的其他月份基本相同:

UPDATE t 
    SET score_Nov = (CASE WHEN CAST(tt.Score_Nov AS INT) >= 4 
          THEN @NotMet ELSE @Met 
        END) 
    FROM #TmpTbl t CROSS JOIN 
     #TmpTbl tt 
    WHERE t.metric = 'Balance Scorecard' AND tt.metric = 'EE'; 
+0

嗨,戈登,我怎样才能使它通配符?在你的例子中,只有当度量标准是“EE”时。我不想单独记录每条记录。有没有另一种方法?我需要它在每个月的所有度量上迭代.. – lucas

+0

@lucas。 。 。您可以处理所有月份,只需将更多列添加到'set'子句。我不明白你的意思是通过额外的指标。 –

+0

嗨高登,这是我所关心的where子句。这也查看了“度量”列(例如AA,BB,CC,DD,EE)。这是一个动态的领域,我不知道列表。 – lucas

相关问题