2017-10-21 108 views
0

因此,我有一些数据列应该对应于红色,黄色或绿色。绿色是最高的,黄色是中等,红色是最低的。为每种颜色指定权重

我在下面写的检查这些列的总和是否为零。如果是,则分配N/A等。

如果绿色多于红色,绿色多于黄色,则分配为优秀。然而,这是错误的逻辑,因为如果有重复的如3绿和3红,那么当它应该是黄色时,我的整体输出将对应于绿色。

IF SUM([# of Yellow])=0 and SUM([# of Green])=0 and SUM([# of Red])=0 THEN 
    "N/A" 
elseif SUM([# of Green])> SUM([# of Red]) and SUM([# of Green])> SUM([# of Yellow]) THEN 
    "Excellent" 
elseif SUM([# of Red])> SUM([# of Green]) and SUM([# of Red])> SUM([# of Yellow]) THEN 
    "Poor" 
ELSE 
    "Fair" 
End 

另外,如果我想赋值说1到绿色和3黄色或5至红色,并取其得分最高,该颜色会占据主导地位。我怎么写这个?

回答

0

使用SQL子查询

SELECT IF Y=0 and G=0 and R=0 THEN 
    "N/A" 
elseif G> R and G> Y THEN 
    "Excellent" 
elseif R> G and R> Y THEN 
    "Poor" 
ELSE 
    "Fair" 
End 
FROM 
(
    SELECT Y = SUM([# of Yellow]), G = SUM([# of Green]), R = SUM([# of Red]) FROM ... 
) AS A 
0

可以使用算法

SELECT 
    CASE 
     WHEN SUM([# of Yellow])=0 and SUM([# of Green])=0 and SUM([# of Red])=0 THEN 'N/A' 
     WHEN ((SUM([# of Green]) > SUM([# of Red])) 
       OR (SUM([# of Green]) = SUM([# of Red]) AND SUM([# of Green]) > SUM([# of Yellow]))) THEN 'Excellent' 
     WHEN ((SUM([# of Red]) > SUM([# of Green])) 
       OR (SUM([# of Red]) = SUM([# of Green]) AND SUM([# of Red]) > SUM([# of Yellow]))) THEN 'Poor' 
     ELSE 'Fair' 
    End 
... 
0

您可以使用嵌套的case语句。我附上了一个示例临时表供参考。 case语句首先检查总和值是否为0.接下来,如果(Green > Yellow) AND (Green > Red)它给出重量Green。类似的逻辑用于红色。最后一种可能性是默认情况下为黄色,并且代码实际上不需要,除了ELSE 'Yellow'

DECLARE @temp TABLE (Red int, Yellow int, Green int) 
INSERT INTO @temp 
VALUES (0, 0, 0) 
    , (2, 1, 1) 
    , (2, 2, 2) 
    , (1, 2, 3) 
    , (1, 3, 2) 
    , (3, 0, 3) 

SELECT CASE WHEN Green + Yellow + Red = 0 
      THEN 'N/A' 
      ELSE CASE WHEN (Green > Yellow) AND (Green > Red) 
         THEN 'Green' 
         ELSE CASE WHEN (Red > Green) AND (Red > Yellow) 
            THEN 'Red' 
            ELSE 'Yellow' 
           END 
        END 
     END AS [Weight] 
    FROM @temp 
+0

Tableau将如何写入? – Nusc

+0

我不知道,对不起。 – Zorkolot