Имея следующую таблицу:
DROP TABLE IF EXISTS #Data
CREATE TABLE #Data
(
Code VARCHAR(10),
Fee VARCHAR(3),
AValue DECIMAL(10, 4)
)
-- DELETE FROM #Data
INSERT INTO #Data
VALUES
('A001', '001', 100), ('A001', '002', 200), ('A001', '003', -50), ('A001', '004', -250), ('A001', '005', 340), ('A001', '006', 500), ('A001', '007', 600)
Мне нужно получить следующий результат (упорядоченная последовательность, основанная на положительном или отрицательном значении Value):
Code Fee Value Row
A001 001 100.0000 P1
A001 002 200.0000 P1
A001 003 -50.0000 N1
A001 004 -250.0000 N1
A001 005 340.0000 P2
A001 006 500.0000 P2
A001 007 600.0000 P2
Я пробовал это:
SELECT Code, Fee, AValue, ROW_NUMBER() OVER(PARTITION BY Code, (CASE WHEN AValue > 0 THEN 1 ELSE 2 END) ORDER BY Fee) 'nRow',
FORMAT(ROW_NUMBER() OVER(PARTITION BY Code, Fee, CASE WHEN AValue > 0 THEN 1 ELSE 2 END ORDER BY Fee), CASE WHEN AValue > 0 THEN 'POS00' ELSE 'NEG00' END)
FROM #Data
Но он возвращает:
Code Fee Value Row
A001 001 100.0000 P1
A001 002 200.0000 P1
A001 003 -50.0000 N1
A001 004 -250.0000 N1
A001 005 340.0000 P1
Какая здесь логика? Вы не объясняете это. Если я правильно догадываюсь, что происходит, когда
value
имеет значение0
?@Larnu Мне нужно создать группы, отсортированные в зависимости от того, является ли значение положительным или отрицательным.