当另一列不同时,选择“与一列不同”

Select Distinct from one column when another column differs

提问人:EthanT 提问时间:11/17/2023 最后编辑:marc_sEthanT 更新时间:11/17/2023 访问量:51

问:

我有一张桌子:

CREATE TABLE #Temp1 
(
    Category_One varchar(10),
    Category_Two varchar(10)
)

INSERT INTO #Temp1 (Category_One, Category_Two)
VALUES ('a', 'c'), 
       ('b', 'c'),
       ('a', 'd'),
       ('b', 'd'),
       ('a', 'e'),
       ('a', 'f'),
       ('b', 'g')
Category_One Category_Two
一个 c
b c
一个 d
b d
一个 e
一个 f
b g

我如何返回这样的表,该表返回一个不同的列表,但还返回一个额外的列,告诉我最终类别是否由两个单独的 ' 组成?CategoryTwoCategoryOne

Category_Final 描述
c A类和B类
d A类和B类
e A类
f A类
g b类
sql-server

评论

1赞 Xedni 11/17/2023
您运行的是哪个版本的 SQL Server? 如果您可以访问它,可能是要走的路。描述是否必须采用这种确切的格式,或者可以使用“类别 a、b”之类的内容?如果有三个或更多子类别,字符串应该如何格式化?STRING_AGG
0赞 Maciej Los 11/17/2023
你也可以使用。PIVOT

答:

3赞 Xedni 11/17/2023 #1

如果运行的是支持 (2017+) 的 SQL Server 版本,并且有三个或更多值,则可以多次重复“and”一词,这应该有效:string_aggcategory_one

select 
    Category_two, 
    Description = 
       'Category ' + 
       string_agg(category_one, ' and ') within group (order by category_one)
from #Temp1
group by Category_two

请注意,如果您有三个或更多值,则每个项目之间将重复单词“and”。category_one

以下是有关该函数的文档: https://learn.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-ver16&viewFallbackFrom=sql-server-2016

评论

0赞 EthanT 11/17/2023
很棒的解决方案。我也不知道string_agg()是一个函数,谢谢。
0赞 Xedni 11/17/2023
很高兴我能帮上忙