कुछ इस तरह से काम करना चाहिए SQL Fiddle
यह अनुक्रमिक डेटा के द्वीपों को SIGN
. के लिए समान मान के साथ ढूंढता है और उन्हें इत्ज़िक बेन गण की पंक्ति संख्या तकनीक का उपयोग करके समान समूह मूल्य आवंटित करता है और फिर उन्हें समूहित करता है और उन्हें एकत्रित करता है। CROSS APPLY ... VALUES
MIN
को अनपिवट करता है और 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