聚合后显示列的特定词 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),那么您必须改变您的客户。
所以维护非常困难,因为你必须到处更新你的客户端。