se hai qualcosa del tipo:
text
result
measure
text
measure
result
text
result
text
measure
text
measure
result
text
measure
text
come hai potuto estrarre ogni misura e risultato tra 2 testi, ok ho estratto i risultati e le misure che voglio e li ho memorizzati in variabili ma cosa posso fare dove ho:
text
measure
text
e mi piacerebbe estrarre il risultato come NULL in questo caso ....
risposte:
1 per risposta № 1Se stai prelevando dati da un file di testo, allorala tua migliore opzione è probabilmente quella di impostare la tabella che stai importando con un campo identità in modo tale che quando la carichi, i valori siano assegnati a un numero in ordine:
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");
La tabella risultante avrà quindi questo aspetto:
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
Da lì possiamo andare a trovare i risultati e le misure tra il testo.
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);
Per prima cosa, dobbiamo ottenere le posizioni di ogni record di testo e il seguente record di testo. Quindi possiamo cercare il primo record di risultati e il record di misura entro l'inizio e la fine.
Result Measure
result measure
result measure
result NULL
NULL measure
result measure
NULL measure