SQL中的公用表表达式

时间:2016-01-04 17:35:05

标签: sql sql-server-2012

我有一个名为tbl_Emp的表:

enter image description here

现在我想用EmpID和EmpSalary选择Unique Emp_Name,如下所示。我只想知道SQL中的Common表表达式是做什么的。

enter image description here

3 个答案:

答案 0 :(得分:2)

这是使用CTE

的简单查询
WITH CTE AS(   
SELECT ROW_NUMBER() OVER(PARTITION BY EmpName ORDER BY EmpID) AS ROWNO,    
                    EmpID,EmpName, EmpSalary FROM tbl_emp
) 
SELECT EmpID, EmpName, EmpSalary  FROM CTE WHERE ROWNO = 1 order by EmpID

如果要删除重复数据,请使用脚本

WITH CTE AS(   
    SELECT ROW_NUMBER() OVER(PARTITION BY EmpName ORDER BY EmpID) AS ROWNO,    
                        EmpID, EmpName, EmpSalary FROM tbl_emp
    ) 
    DELETE FROM CTE WHERE ROWNO > 1

我认为该查询可以帮助您

答案 1 :(得分:0)

我认为这不需要CTE。我会JOIN表自己。类似的东西:

SELECT t.* FROM tbl_Emp t
INNER JOIN
(
  select MIN(EmpID) FirstEmp from tbl_Emp group by EmpName
) t2
ON t2.FirstEmp=t.EmpID;

基本上,我要加入第二个表格,其中包含每个不同EmpID最低 EmpName字段,然后选择与其中一个匹配的所有行EmpID字段。

SQL Fiddle

答案 2 :(得分:0)

看起来你正在寻找DISTINCT。

类似的东西:

SELECT DISTINCT Emp_Name, EmpID, EmpSalary
FROM tbl_emp;