Sesuatu seperti ini harus melakukan pekerjaan SQL Fiddle
Ia menemukan pulau data berurutan dengan nilai yang sama untuk SIGN
dan mengalokasikan nilai pengelompokan yang sama menggunakan teknik nomor baris Itzik Ben Gan kemudian mengelompokkannya dan menggabungkannya. CROSS APPLY ... VALUES
unpivot MIN
dan MAX
;WITH T1
AS (SELECT *,
ROW_NUMBER() OVER (PARTITION BY SIGN(PctGain)
ORDER BY WSeqKey) - WSeqKey AS Grp
FROM YourTable),
T2
AS (SELECT MIN(WSeqKey) AS BeginSeq,
MAX(WSeqKey) AS EndSeq,
SIGN(PctGain) AS Sign
FROM T1
GROUP BY Grp,
SIGN(PctGain))
SELECT CASE Sign
WHEN -1 THEN 'Negative'
WHEN 0 THEN 'Equal'
WHEN 1 THEN 'Positive'
END AS [Sign],
Descriptor,
SeqKey
FROM T2
CROSS APPLY (VALUES('Begin', BeginSeq),
('End', EndSeq)) V(Descriptor, SeqKey)
ORDER BY SeqKey