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先回答。