通过更改列值将行合并为一个

时间:2017-11-09 20:49:53

标签: sql sql-server

我有这样的表:

学生:

<!DOCTYPE html>
<html>
  <head>
    <script src='code.js'></script>
  </head>
  <body>
    <center>
      <h1>GGD calculator</h1>
      <p>Reken de Grote Gemene Deler uit van <input type='number' id='input1'> en <input type='number' id='input2'>.</p>
      <br>
      <input type='button' value='Bereken!' onClick='bereken()'>
    </center>
  </body>
</html>

我想要做的是将ID|NAME |FOOD |Score 1 |FRED |Apple|23 1 |FRED |Pear |50 2 |HENRY |BERRY|20 3 |Alex |Apple|40 更改为'混合',让所有学生吃超过1 不同FOOD。所以结果看起来像这样:

FOOD

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您可以将group byiifcount条件一起使用:

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

如果count(distinct [FOOD])条目可以针对相同的FOODID重复,则应使用NAME

答案 1 :(得分:1)

使用GROUP BY可能会有你想要的。这是一个巧妙的小窍门,看看是否有不同的价值观&#39;在一行以上

在您的数据上试试这个

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

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