2017-11-09 4 views
0

を変更することにより、1に行をマージ:私はこのような表を持っている列の値

学生:

ID|NAME |FOOD |Score 
1 |FRED |Apple|23 
1 |FRED |Pear |50 
2 |HENRY |BERRY|20 
3 |Alex |Apple|40 

を私がやりたいことは、学生が食べるすべてのためのFOODに「MIXED」を変更することです1より多く異なるFOOD。結果は次のようになります。

ID|NAME |FOOD |Score 
1 |FRED |MIXED|73 
2 |HENRY |BERRY|20 
3 |Alex |Apple|40 

アイデアをお持ちですか?あなたはFOODのエントリが同じIDNAMEのために繰り返すことができる場合にはcount(distinct [FOOD])を使用する必要があります

select [ID], 
     [NAME], 
     iif(count([FOOD]) > 1, 'MIXED', [FOOD]) as [FOOD], 
     sum([Score]) as [Score] 
from [Students] 
group by [ID], 
     [NAME] 

答えて

1

あなたはcount条件でgroup byiifを使用することができます。

+0

でも、SQLChaoとGrantlyの回答はうまく機能しました。私はこれを使い、Potashinが最初に答えた。 – SQLserving

1

GROUP BYを使用すると、必要な場合があります。これは、「異なる値が」

を使用してデータに

SELECT 
    ID 
    ,NAME 
    ,CASE 
     WHEN MIN(FOOD) <> MAX(FOOD) 
     THEN 'MIXED' ELSE [FOOD] 
    END AS FOOD 
    ,SUM(Score) AS Score 
GROUP BY 
    ID 
    ,NAME 
1

可能なソリューションを、これを試してみてください複数の行にあるかどうかを確認するために小ぎれいなトリックですcase

DEMO

SELECT 
     id 
     , name 
     , CASE WHEN COUNT(1) > 1 THEN 'MIXED' ELSE MAX(FOOD) END AS Food 
     , SUM(Score) AS Score 
    FROM dbo.students 
    GROUP BY id, name 
    ORDER BY id 
関連する問題