我通过Azure数据工厂加载一些非常讨厌的数据
这是加载后数据的外观,分为两部分:
1.测试的元数据
2.测试的实际测量 - >测量是数字
图片我有大约10次这样的'包裹' 1.Metadata + 2.Measurements
我希望它/我正在寻找的是以下内容: 带有1,2,....的数字列是我正在寻找的!
想象一下,我的屏幕截图不会再进一步,但这一直持续到id = 10 我想这里需要一个while循环...
之前的查询:
SELECT Field1 FROM Input
查询后:
SELECT GeneratedId, Field1 FROM Input
提前多多感谢!
答案 0 :(得分:1)
这是一个解决方案,这需要SQL-SERVER 2012或更高版本。
首先在您的数据上获取Id
列。如果你可以在脚本之前执行更好的操作,但如果没有,请尝试这样的事情......
CREATE TABLE #InputTable (
Id INT IDENTITY(1, 1),
TestData NVARCHAR(MAX) )
INSERT INTO #InputTable (TestData)
SELECT Field1 FROM Input
现在创建一个查询以获取每个包的GeneratedId
以及它们开始和结束的Id
。您可以通过获取所有记录LIKE 'title%'
来执行此操作,因为这是每个包的第一条记录,然后使用ROW_NUMBER
,Id
和LEAD
作为GeneratedId
分别是},StartId
和EndId
。
SELECT
GeneratedId = ROW_NUMBER() OVER(ORDER BY (Id)),
StartId = Id,
EndId = LEAD(Id) OVER (ORDER BY (Id))
FROM #InputTable
WHERE TestData LIKE 'title%'
最后,将此连接到输入以获取所有记录,并使用正确的GeneratedId
。
SELECT
package.GeneratedId, i.TestData
FROM (
SELECT
GeneratedId = ROW_NUMBER() OVER(ORDER BY (Id)),
StartId = Id,
EndId = LEAD(Id) OVER (ORDER BY (Id))
FROM #InputTable
WHERE TestData LIKE 'title%' ) package
INNER JOIN #InputTable i
ON i.Id >= package.StartId
AND (package.EndId IS NULL OR i.Id < package.EndId)