День №3 с SQL Server.Использование CROSS APPLY для более чем одного столбца
Я пытаюсь объединить 2 столбца данных с разделителями в один вывод из функции, обозначенной таблицей. Вот мои данные:
Я хотел бы, чтобы данные были обработаны и помещены в таблицу в следующем формате:
Я в настоящее время пытается использовать этот CROSS APPLY TSQL, но я не знаю, что делаю.
USE [Metrics]
INSERT INTO dbo.tblSplitData(SplitKey, SplitString, SplitValues)
SELECT d.RawKey, c.*, e.*
FROM dbo.tblRawData d
CROSS APPLY dbo.splitstringcomma(d.DelimitedString) c, dbo.splitstringcomma(d.DelimitedValues) e
Мои исследования по CROSS ОТНОСИТЬСЯ имеет широкий контекст, и я не понимаю, как она должна применяться в этом случае. Нужен ли мне подзапрос с дополнительным CROSS APPLY и объединение для объединения возвратов из двух функций, связанных с таблицей?
Вот функция раскола я использовал первоначально (я не могу вспомнить автора зачислить их):
CREATE FUNCTION [dbo].[splitstring] (@stringToSplit VARCHAR(MAX), @Delimiter CHAR(1))
RETURNS
@returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN
DECLARE @name NVARCHAR(255)
DECLARE @pos INT
WHILE CHARINDEX(@Delimiter, @stringToSplit) > 0
BEGIN
SELECT @pos = CHARINDEX(@Delimiter, @stringToSplit)
SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)
INSERT INTO @returnList
SELECT @name
SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)[email protected])
END
INSERT INTO @returnList
SELECT @stringToSplit
RETURN
END
Редактировать & Пересмотренный запрос
USE [Metrics]
INSERT INTO dbo.tblSplitData(SplitKey, SplitString, SplitValues)
SELECT s.RawKey, s.SplitString, v.SplitValues
FROM (
SELECT d.RawKey, d.DelimitedString,
c.item SplitString, c.rn
FROM dbo.tblRawData d
CROSS APPLY dbo.splitstring(d.DelimitedString, ',') c
) s
INNER JOIN
(
SELECT d.RawKey, d.DelimitedValues,
c.item SplitValues, c.rn
FROM dbo.tblRawData d
CROSS APPLY dbo.splitstring(d.DelimitedValues, ',') c
) v
on s.RawKey = v.RawKey
and s.rn = v.rn;
не могу сказать вам, сколько я ценю помощь - я буду видеть, если я не могу адаптировать этот код сразу :) – Shrout1
Ok - Я создал простой вариант запрос просто для проверки различных возвратов функции. Кажется, он возвращает две строки; как будто он не смог выполнить последнюю итерацию функции Split ... 'USE [410_Metrics] INSERT INTO dbo.tblSplitData (SplitKey, SplitString, RowNumber) SELECT d.RawKey, c.items, c.rn FROM dbo .tblRawData d CROSS APPLY dbo.Split (d.DelimitedString, ',') c' – Shrout1
@Chris Сложно сказать, так как я не вижу, что вы используете, можете ли вы редактировать скрипт sql с точным кодом и данными, которые вы используете? – Taryn