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

Sql 通过更改列值将行合并为一行,sql,sql-server,Sql,Sql Server,我有这样的桌子: 学生: ID|NAME |FOOD |Score 1 |FRED |Apple|23 1 |FRED |Pear |50 2 |HENRY |BERRY|20 3 |Alex |Apple|40 我想做的是将食物改为'MIXED',让所有学生吃超过1种不同的食物。因此,结果如下所示: ID|NAME |FOOD |Score 1 |FRED |MIXED|73 2 |HENRY |BERRY|20 3 |Alex |Apple|40

我有这样的桌子:

学生:

ID|NAME  |FOOD |Score  
1 |FRED  |Apple|23  
1 |FRED  |Pear |50  
2 |HENRY |BERRY|20  
3 |Alex  |Apple|40
我想做的是将
食物
改为'MIXED',让所有学生吃超过1种不同的
食物
。因此,结果如下所示:

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

有什么想法吗?

您可以使用
分组依据
iif
以及
计数
条件:

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

您应该使用
计数(不同的[食品])
如果
食品
条目可以针对相同的
ID
名称重复

您可以使用
分组依据
iif
条件:

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

您应该使用
count(distinct[FOOD])
,以防
FOOD
条目可以针对相同的
ID
NAME

重复,使用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
选择
身份证件
名称
案例
当最小值(食物)最大值(食物)时
然后“混合”其他[食物]
作为食物结束
,总和(分数)作为分数
分组
身份证件
名称

使用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
选择
身份证件
名称
案例
当最小值(食物)最大值(食物)时
然后“混合”其他[食物]
作为食物结束
,总和(分数)作为分数
分组
身份证件
名称

使用
案例的可能解决方案

   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

使用
案例的可能解决方案

   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

尽管赵和格兰利的回答也很有效。我用了这个,Potashin先回答了。尽管SQLChao和Grantly的回答也很有效。我用这个,Potashin先回答。