Geofferz Ответов: 1

Разделение данных из одного столбца на несколько столбцов и выбор данных из нескольких таблиц


Привет Ребята,

Итак, у меня есть данные, которые хранятся в одном столбце, и я хочу разделить их с помощью разделителя пространства. Я достиг этого, но я хочу иметь возможность выбирать другие данные, которые мне не нужно будет разбивать на результаты в качестве отчета.

Например,

Таблица 1: Сведения о сотрудниках

Таблица 2: Заработная Плата

Таблица 3: Департаменты

Теперь есть идентификатор, который связывает все эти таблицы, который является одним и тем же. Но я должен был уметь выбирать данные из всех этих таблиц, а также уметь делать разделение с помощью разделителя. Ниже приводится то, что я сделал до сих пор:

Вот оператор select, который у меня был до разделения, теперь я хочу разделить только столбец в одной таблице, но связать все таблицы вместе и отобразить результаты, которые я сделал с помощью этого оператора:

select distinct f.fle_id,
				f.filename,
				c.clp_clip_name,
				f.FileExtension,
				c.locationsList, 
				f.UNC,
				f.Directory,
				f.framerate		 
from			lls_clips C with (NOLOCK)
inner join		lls_fileimports F with (NOLOCK)
on				c.fle_id = f.fle_id 
inner join		lls_jobs J with (NOLOCK)
on				c.fle_id = j.fle_id
where				J.LastUpdated >= dateadd(day, -1, getdate()) 


Что я уже пробовал:

declare @delimiter Varchar(50)

Set @delimiter = ' '
;WITH CTE As
(
	select 
			[LocationsList],
			[clp_clip_name],
			CAST('<m>' + Replace([LocationsList], @delimiter , '</m><m>') + '</m>' AS XML)
			AS [LocationsList XML]
		From [lls_clips]
)
Select	distinct

		[clp_clip_name],
		[locationsList], 		
		[LocationsList XML].value('/M[1]', 'varchar(50)') As [First Location],
		[LocationsList XML].value('/M[2]', 'varchar(50)') As [Second Location],
		[LocationsList XML].value('/M[3]', 'varchar(50)') As [Third Location],
		[LocationsList XML].value('/M[4]', 'varchar(50)') As [Fourth Location],
		[LocationsList XML].value('/M[5]', 'varchar(50)') As [Firth Location],
		[LocationsList XML].value('/M[6]', 'varchar(50)') As [Sixth Location]

From CTE
GO


******ПРИМЕЧАНИЯ НИЖЕ******

--Вот другие таблицы, которые я хочу связать с [Files table - Files F] и [Jobs J]
--поля из файлов включают - F. FL_ID, f.filename, f.uncpath, f.direcotry
--поля из заданий включают J. FL_ID, J. filename
--поля из приведенной выше таблицы lls_clips включают C. FL_ID, C. filename и так далее

--Поэтому мне нужно иметь возможность связать все эти данные вместе в одном отчете. Единственный столбец, который я разделяю, находится в одной таблице, которая является таблицей LLS_Clips

ZurdoDev

Где ты застрял? В чем заключается ваш вопрос?

Geofferz

просто обновил вопрос, это оператор select, который я должен был вернуть все данные из разных таблиц без разделения столбцов:

выбор различных Ф.fle_id,
Ф.именем,
гр.clp_clip_name,
Ф.Расширение,
гр.locationsList,
Ф.UNC-пути,
Ф.Каталог,
Ф.кадров
из lls_clips C с (NOLOCK)
внутреннее соединение lls_fileimports F с (NOLOCK)
на c.fle_id = f.fle_id
внутреннее соединение lls_jobs J с (NOLOCK)
на c.fle_id = j.fle_id
где J. LastUpdated >= dateadd(day, -1, getdate())

John C Rayan

Разве вы не можете объединить их в общее табличное выражение перед получением результирующего набора XML?

1 Ответов

Рейтинг:
0

Member 13681435

У меня есть столбец с полным именем, например "david#jones" в таблице student.

поэтому, если вы хотите разделить их, например, имя как "Дэвид" и фамилию как "Джонс"
здесь идет запрос типа

ВЫБЕРИТЕ ПОЗИЦИЮ( '#' В ПОЛНОЕ ИМЯ) КАК ПОС ,ФУНКЦИЮ SUBSTR(ИМЯ , 1,ПОЗ-1) В КАЧЕСТВЕ ИМЕНИ,ФУНКЦИЮ SUBSTR(ПОЛНОЕ ИМЯ,ПОЗ+1) КАК LNAME В
ОТ СТУДЕНТОВ

Столбец POS определяет положение специального символа,
следующая подстрока берется от первого символа до предпоследнего специального символа как FNAME, а от следующей позиции специального символа до конца берется как LNAME.


CHill60

Это работает только в том случае, если существует один разделитель.