«Отличительный» столбец в запросе SQL - PullRequest
1 голос
/ 21 июля 2010

SELECT id, EmpNo FROM EmployeesTable

EmpNo может быть одинаковым для 1 или более записей в результатах вышеупомянутого запроса.Теперь я хочу добавить еще один столбец, производный от EmpNo (назовем его EmpNo2), но возвращающий только отдельные значения EmpNo.

Например, если вышеуказанный запрос возвращает 100 записей, но есть 69 различных значений EmpNo, и я изменяю запрос на

SELECT id, EmpNo, Distinct EmpNo2
FROM  EmployeesTable EmpNo 

, я хочу, чтобы все 100 строк были возвращены, кроме последнейстолбец EmpNo2 должен возвращать 69 различных значений поля EmpNo.

Но, как уже известно, использование различных таким образом приводит к ошибке, но я хочу реализовать такую ​​функциональность - и подзапрос не помогает.

ОБРАЗЕЦ ТРЕБУЕМЫХ РЕЗУЛЬТАТОВ

   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 ]

1 голос
/ 21 июля 2010

Как насчет:

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

Вы говорите, что подзапрос не будет работать - почему бы и нет?

0 голосов
/ 21 июля 2010

Ваше требование не ясно, и у меня также очень мало информации. Следующее это то, что вам нужно. Это может быть даже лучше, но это всего лишь попытка.

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
...