聚合后显示列的特定词 SQL 服务器
Display specific word for column after aggregation SQL Server
在SQL服务器中有什么方法可以在分组后选择特定的字符串来显示吗?
例如
SELECT MIN(MovieName) AS [Movie Name], Genre
FROM Movie
GROUP BY Genre
结果:
Movie Name Genre
Anon Sci-fi
现在我知道您可以为该列使用 min/max,但是无论如何我可以显示 "star trek" 例如。
Movie Name Genre
Star Trek Sci-fi
sql fiddle - http://sqlfiddle.com/#!6/0e12fa/6
基于受欢迎程度的解决方案:
declare @Movie TABLE (
MovieName varchar(25),
Genre varchar(20),
popularity int
)
INSERT INTO @Movie (MovieName, Genre, popularity)
VALUES ('Star Wars', 'Sci-fi', 0),
('Anon', 'Sci-fi', 0),
('Star Trek', 'Sci-fi', 1),
('Moon', 'Sci-fi', 0),
('Csi', 'Crime', 0)
select m.Genre,
(select top 1 m2.MovieName from @Movie m2 where m2.Genre = m.Genre order by m2.popularity desc) as MovieName
from @Movie m
group by m.Genre
结果是
Genre MovieName
_________________
Crime Csi
Sci-fi Star Trek
此解决方案无需维护,它将保持正常工作。
快速而肮脏的解决方案:
首先创建视图
create view vwMovie as
select Genre,
case when Genre = 'Sci-fi' then 'Star Trek'
when Genre = 'Crime' then 'Csi'
else 'unknown'
end as MovieName
from Movie
group by Genre
现在在您的客户端中使用此查询
select * from vwMovie
结果和上面完全一样
但是如果有什么变化(新的流派或者你想显示 firefly
而不是 star trek
)那么你不必改变你的客户端,而只需改变数据库中的视图。
所以维护还是可以的。
快速且非常肮脏的解决方案:
select Genre,
case when Genre = 'Sci-fi' then 'Star Trek'
when Genre = 'Crime' then 'Csi'
else 'unknown'
end as MovieName
from @Movie
group by Genre
结果和上面完全一样
但是,如果有任何变化(新类型或您想显示 firefly
而不是 star trek
),那么您必须改变您的客户。
所以维护非常困难,因为你必须到处更新你的客户端。
在SQL服务器中有什么方法可以在分组后选择特定的字符串来显示吗?
例如
SELECT MIN(MovieName) AS [Movie Name], Genre
FROM Movie
GROUP BY Genre
结果:
Movie Name Genre
Anon Sci-fi
现在我知道您可以为该列使用 min/max,但是无论如何我可以显示 "star trek" 例如。
Movie Name Genre
Star Trek Sci-fi
sql fiddle - http://sqlfiddle.com/#!6/0e12fa/6
基于受欢迎程度的解决方案:
declare @Movie TABLE (
MovieName varchar(25),
Genre varchar(20),
popularity int
)
INSERT INTO @Movie (MovieName, Genre, popularity)
VALUES ('Star Wars', 'Sci-fi', 0),
('Anon', 'Sci-fi', 0),
('Star Trek', 'Sci-fi', 1),
('Moon', 'Sci-fi', 0),
('Csi', 'Crime', 0)
select m.Genre,
(select top 1 m2.MovieName from @Movie m2 where m2.Genre = m.Genre order by m2.popularity desc) as MovieName
from @Movie m
group by m.Genre
结果是
Genre MovieName
_________________
Crime Csi
Sci-fi Star Trek
此解决方案无需维护,它将保持正常工作。
快速而肮脏的解决方案:
首先创建视图
create view vwMovie as
select Genre,
case when Genre = 'Sci-fi' then 'Star Trek'
when Genre = 'Crime' then 'Csi'
else 'unknown'
end as MovieName
from Movie
group by Genre
现在在您的客户端中使用此查询
select * from vwMovie
结果和上面完全一样
但是如果有什么变化(新的流派或者你想显示 firefly
而不是 star trek
)那么你不必改变你的客户端,而只需改变数据库中的视图。
所以维护还是可以的。
快速且非常肮脏的解决方案:
select Genre,
case when Genre = 'Sci-fi' then 'Star Trek'
when Genre = 'Crime' then 'Csi'
else 'unknown'
end as MovieName
from @Movie
group by Genre
结果和上面完全一样
但是,如果有任何变化(新类型或您想显示 firefly
而不是 star trek
),那么您必须改变您的客户。
所以维护非常困难,因为你必须到处更新你的客户端。