将STRING_SPLIT
用于列中的数据后,我有一堆空行和其他行,我不需要。我需要的所有行都直接在空白行下。
是否有一些查询可以选择空白行之后的所有行并删除其余行?
这是我到目前为止的查询:
select value
from catalog
cross apply string_split(path, '/')
My results are in this link,但我想要的结果是(对于此屏幕截图):
'HQF', 'Insurance', 'Insurance', 'Insurance', 'Insurance'...
答案 0 :(得分:1)
我有点担心订单,因为订单无法保证... row_number会顺序编号吗?
但这是一个镜头:
WITH CTE AS (SELECT value, row_number() over (order by (Select NULL)) RN
FROM catalog
CROSS APPLY string_split(path, '/'))
SELECT B.*
FROM CTE A
INNER JOIN CTE B
on A.RN+1 = B.RN
WHERE (A.value is null or A.value = '')
and B.value is not null
and b.value <> ''
基本上有一组数据,所有空间都有行号和一组数据没有空格..并且将所有行连接到下一行只返回第一个空格和第二个数据的空间。
答案 1 :(得分:1)
DECLARE @Catalog AS TABLE (Id INT IDENTITY(1,1), StringToSplit VARCHAR(100))
INSERT INTO @Catalog (StringToSplit) VALUES ('A//B/C/D'),('1//2//3'),('/1/2')
CREATE TABLE #StringSplitResult (
OrdinalID INT IDENTITY(1,1)
,Id INT
,String VARCHAR(100)
)
INSERT INTO #StringSplitResult(Id,String)
SELECT Id, ss.value
FROM
@Catalog c
CROSS APPLY string_spilt(c.StringToSplit,'/') ss
;WITH cte AS (
SELECT
*
,RowBeforeString = LAG(String) OVER (PARTITION BY Id ORDER BY OrdinalId)
FROM
#StringSplitResult
)
SELECT *
fROM
cte
WHERE
RowBeforeString = ''
在使用string_spilt
之后,我对XQbert的关注程度与行的顺序相同。我决定使用临时表来使用ID来对抗它。以下是跨多个字符串使用LAG()
的示例,其中字符串中可能包含多个空白行/行。