SQL查询中的“Distinct”列

时间:2010-07-21 08:44:40

标签: sql-server-2005 tsql reportingservices-2005 reporting-services

  

SELECT id,EmpNo   来自EmployeesTable

对于上述查询结果中的1个或多个记录,EmpNo可以相同。我现在想要添加另一个派生自EmpNo的列(让我们称之为EmpNo2),但只返回EmpNo的不同值。

例如,如果上面的查询返回100条记录,但有69个不同的EmpNo值,我将查询修改为

SELECT id, EmpNo, Distinct EmpNo2
FROM  EmployeesTable EmpNo 

, 我希望返回所有100行,但最后一列EmpNo2应返回69个不同的EmpNo字段值。

但是正如已经知道的那样,以这种方式使用distinct会导致错误,但我想实现这样的功能 - 并且子查询没有帮助。

样本需要的结果

   ID  EmpNo   EmpNo2

    1  0T4/HR 0T4/HR
    1  0T4/HR 2VP/E
    1  0T4/HR xT9/67
    1  0T4/HR 
    1  0T4/HR 
    2  2VP/E 
    2  2VP/E
    2  2VP/E 
    2  2VP/E 
    2  2VP/E 
    3  XT9/67 
    3  XT9/67 
    3  xT9/67 
    3  XT9/67 

2 个答案:

答案 0 :(得分:1)

怎么样:

Select id, empno, empno2
from employeestable left outer join (
 SELECT min([id]) as minid
      ,[empno] empno2
  FROM [EmployeesTable]
group by empno) etab2 on employeestable.id = etab2.minid

你说子查询不起作用,但为什么不呢?

答案 1 :(得分:0)

您的要求不明确,我的信息也很少。以下是您的需求。这可能会更好,但这只是一次尝试。

declare @temp table
(
    uniqueid int identity(1, 1),
    id int,
    empno varchar(50),
    empno2 varchar(50)
)

insert into @temp  select   1,  '0T4/HR', null
insert into @temp select     1,  '0T4/HR' , null
insert into @temp select     1 , '0T4/HR' , null
insert into @temp select     1,  '0T4/HR' , null
insert into @temp select     1,  '0T4/HR'  , null
insert into @temp select     2,  '2VP/E'  , null
insert into @temp select     2,  '2VP/E' , null
insert into @temp select     2,  '2VP/E'  , null
insert into @temp select     2,  '2VP/E'  , null
insert into @temp select     2,  '2VP/E'  , null
insert into @temp select     3,  'XT9/67'  , null
insert into @temp select     3,  'XT9/67'  , null
insert into @temp select     3,  'xT9/67'  , null
insert into @temp select     3,  'XT9/67'  , null

SELECT ROW_NUMBER() OVER (ORDER BY id) AS id, empno into #temp FROM @temp group by empno, id

update @temp set empno2 = t2.empno
from @temp t inner join #temp t2 on t.uniqueid = t2.id

select * from @temp

drop table #temp