如果你從一個文本文件中提取數據中,那麼你最好的選擇是可能要設置
DECLARE @table TABLE
(RowNum INT IDENTITY
,val VARCHAR(36));
INSERT INTO @table
VALUES ('text'),
('result'),
('measure'),
('text'),
('measure'),
('result'),
('text'),
('result'),
('text'),
('measure'),
('text'),
('measure'),
('result'),
('text'),
('measure'),
('text');
結果表然後將這個樣子:多達你讓你加載它導入到具有標識字段的表,該值按順序分配一個編號
RowNum val
1 text
2 result
3 measure
4 text
5 measure
6 result
7 text
8 result
9 text
10 measure
11 text
12 measure
13 result
14 text
15 measure
16 text
從那裏我們可以去找到文本之間的結果和措施。
SELECT Results.Result
,Measures.Measure
FROM ((
SELECT RowNum AS Start FROM @table WHERE val = 'text'
) AS A
OUTER APPLY (
SELECT TOP 1 RowNum AS [End]
FROM @table endTab
WHERE val = 'text'
AND A.Start < endTab.RowNum
ORDER BY RowNum
) AS B
OUTER APPLY (
SELECT TOP 1
val AS Result
FROM @table resultTab
WHERE val = 'result'
AND resultTab.RowNum BETWEEN A.Start AND B.[End]
) AS Results
OUTER APPLY (
SELECT TOP 1
val AS Measure
FROM @table measureTab
WHERE val = 'measure'
AND measureTab.RowNum BETWEEN A.Start AND B.[End]
) AS Measures);
首先,我們需要得到每個文本記錄的位置和它的下面的文本記錄。然後我們可以在開始和結束時查找第一個Result記錄和Measure記錄。
Result Measure
result measure
result measure
result NULL
NULL measure
result measure
NULL measure
SQL表示*無序*集。鑑於這個事實,你的問題完全不清楚 - 這似乎取決於價值的排序。 –
首先,您向我們展示的表格片段有點毫無意義,因爲沒有列來指定訂單,並且您得到的答案几乎肯定會與訂單相關。其次,您可能更容易在另一個工具中執行此操作。 –
我從文本文件中提取值並將它們插入到我的表格中,是的,我知道在另一個工具中它會更容易,但很遺憾,我沒有這個選擇 –