2014-11-26 4 views
-1

У меня есть две таблицы SQL Server, EmployeeMst и EmployeeHistoryПолучение имя из значений, разделенных запятыми

EmployeeMst мой основной таблицы, а EmployeeHistory моя таблица рекордов.

храню разделенных запятыми значений в EmployeeHistory

Теперь я хочу, чтобы получить имена сотрудников с использованием запроса T-SQL

Мой стол EmployeeMst

EmpNo EmpName 
--------------------- 
1  abc 
2  xyz 
3  apple 
4  banan 
5  apk 
6  ico 
7  exe 
8  botle 
9  dev 
10  tbl 
11  col 
12  fun 
13  dbo 
14  xnb 
15  png 
16  jpgn 
17  pngns 
18  dknd 
19  dnckd 
20  dnicnd 

EmployeeHistory:

EmpYear EmpNo 
--------------------------------- 
2010  1,2,3,10,11,12,13 
2011  1,2,3,4,5,6,16,17,18 

Теперь я хочу выход как показано ниже

ВЫВОД:

EmpYear EmpNo EmpName 
2010  1  abc 
2010  2  xyz 
2010  3  apple 
2010  10  tbl 
2010  11  col 
2010  12  fun 
2010  13  dbo 
2011  1  abc 
2011  2  xyz 
2011  3  apple 
2011  4  banan 
2011  5  apk 
2011  6  ico 
2011  16  jpgn 
2011  17  pngns 
2011  18  dknd 

Есть так много значений, разделенных запятыми в EmpNo column

SQLFIDDLE

+0

Я понимаю, но я не могу получить вывод из другого вопроса. –

+0

Вы можете, если вы поместите вывод функции в таблицу temp/variable, а затем используйте это в своем окончательном выборе –

+0

http://stackoverflow.com/questions/10581772/how-to-split-a-comma-separated- value-to-columns –

ответ

0

Попробуйте этот код:

CREATE FUNCTION [dbo].[SplitString] 
( 
    -- Add the parameters for the function here 
    @myString nvarchar(max), 
    @deliminator nvarchar(10) 
) 
RETURNS 
@ReturnTable TABLE 
( 
    -- Add the column definitions for the TABLE variable here 
    [part] [nvarchar](max) NULL 
) 
AS 
BEGIN 
     Declare @iSpaces int 
     Declare @part nvarchar(max) 

     --initialize spaces 
     Select @iSpaces = charindex(@deliminator,@myString,0) 
     While @iSpaces > 0 

     Begin 
      Select @part = substring(@myString,0,charindex(@deliminator,@myString,0)) 

      Insert Into @ReturnTable(part) 
      Select @part 

    Select @myString = substring(@mystring,charindex(@deliminator,@myString,0)+ len(@deliminator),len(@myString) - charindex(' ',@myString,0)) 


      Select @iSpaces = charindex(@deliminator,@myString,0) 
     end 

     If len(@myString) > 0 
      Insert Into @ReturnTable 
      Select @myString 

    RETURN 
END 

затем

select part from SplitString('a,b,c,d,e,f,g',',') 
Смежные вопросы