如何编写一个DISTINCT CONCAT语句?

4
新的SQL开发人员想知道如何制作一个DISTINCT CONCAT语句。以下是没有DISTINCT关键字的语句:
COLUMN Employee FORMAT a25;
SELECT CONCAT(CONCAT(EMPLOYEEFNAME, ' '), EMPLOYEELNAME) AS "Employee", JOBTITLE "Job Title" 
FROM Employee
ORDER BY EMPLOYEEFNAME;

这是它的输出结果:
Employee                  Job Title               
------------------------- -------------------------
Bill Murray               Cable Installer          
Bill Murray               Cable Installer          
Bob Smith                 Project Manager          
Bob Smith                 Project Manager          
Frank Herbert             Network Specilist        
Henry Jones               Technical Support        
Homer Simpson             Programmer               
Jane Doe                  Programmer               
Jane Doe                  Programmer               
Jane Doe                  Programmer               
Jane Fonda                Project Manager          
John Jameson              Cable Installer          
John Jameson              Cable Installer          
John Carpenter            Technical Support        
John Carpenter            Technical Support        
John Jameson              Cable Installer          
John Carpenter            Technical Support        
John Carpenter            Technical Support        
Kathy Smith               Network Specilist        
Mary Jane                 Project Manager          
Mary Jane                 Project Manager          

 21 rows selected 

如果我使用 DISTINCT 关键字,我只能选择11行,但是如果我使用 SELECT DISTINCT CONCAT 我会收到错误提示。

执行 SELECT DISTINCT ... ORDER BY "Employee" - jarlh
1个回答

8

一种选项是使用 GROUP BY

SELECT CONCAT(CONCAT(EMPLOYEEFNAME, ' '), EMPLOYEELNAME) AS "Employee",
       JOBTITLE AS "Job Title" 
FROM Employee
GROUP BY CONCAT(CONCAT(EMPLOYEEFNAME, ' '), EMPLOYEELNAME),
         JOBTITLE
ORDER BY "Employee"

如果您真的想使用DISTINCT,另一个选择是对当前查询进行子查询:

SELECT DISTINCT t.Employee,
                t."Job Title"
FROM
(
    SELECT CONCAT(CONCAT(EMPLOYEEFNAME, ' '), EMPLOYEELNAME) AS "Employee",
           JOBTITLE AS "Job Title" 
    FROM Employee
) t

你能解释一下使用 SELECT DISTINCT 时 OP 看到的错误吗? - Gordon Linoff
关于第一个选项,我尝试使用GROUP BYORDER BY,但是现在我得到了不同的错误。GROUP BY做了我想要的事情,这很好,但是我想按照升序顺序排序名称。 - Derrick Rose
我可以。当使用SELECT DISTINCT时,只能在ORDER BY中使用SELECT列表项。 - jarlh
考虑 ('a','bcd'), ('abc','d'), ('ab','cd') 这些数据。它们的连接值相同,因此无法按照第一个项目进行排序。 - jarlh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接