У меня есть смутное представление о том, как сделать это, используя CURSOR
s, но я все еще пытаюсь потратить некоторое время на размышления о том, как сделать это, не используя их. У меня есть такая таблица:
CREATE TABLE #MATCHEDADDITION(GroupNo int, FirstName varchar(255), Value int)
INSERT INTO #MATCHEDADDITION VALUES(1, 'john', 60)
INSERT INTO #MATCHEDADDITION VALUES(1, 'john', 50)
INSERT INTO #MATCHEDADDITION VALUES(1, 'john', 40)
INSERT INTO #MATCHEDADDITION VALUES(1, 'john', 30)
INSERT INTO #MATCHEDADDITION VALUES(1, 'john', 20)
INSERT INTO #MATCHEDADDITION VALUES(1, 'john', 10)
INSERT INTO #MATCHEDADDITION VALUES(1, 'adam', 80)
INSERT INTO #MATCHEDADDITION VALUES(1, 'adam', 50)
INSERT INTO #MATCHEDADDITION VALUES(1, 'adam', 40)
INSERT INTO #MATCHEDADDITION VALUES(1, 'adam', 30)
INSERT INTO #MATCHEDADDITION VALUES(1, 'adam', 20)
INSERT INTO #MATCHEDADDITION VALUES(1, 'adam', 10)
INSERT INTO #MATCHEDADDITION VALUES(2, 'jill', 60)
INSERT INTO #MATCHEDADDITION VALUES(2, 'jill', 50)
INSERT INTO #MATCHEDADDITION VALUES(2, 'jill', 40)
INSERT INTO #MATCHEDADDITION VALUES(2, 'jill', 30)
INSERT INTO #MATCHEDADDITION VALUES(2, 'jill', 20)
INSERT INTO #MATCHEDADDITION VALUES(2, 'jill', 10)
INSERT INTO #MATCHEDADDITION VALUES(2, 'toni', 90)
INSERT INTO #MATCHEDADDITION VALUES(2, 'toni', 50)
INSERT INTO #MATCHEDADDITION VALUES(2, 'toni', 40)
INSERT INTO #MATCHEDADDITION VALUES(2, 'toni', 30)
INSERT INTO #MATCHEDADDITION VALUES(2, 'tami', 80)
INSERT INTO #MATCHEDADDITION VALUES(2, 'tami', 50)
INSERT INTO #MATCHEDADDITION VALUES(2, 'tami', 40)
INSERT INTO #MATCHEDADDITION VALUES(2, 'tami', 30)
INSERT INTO #MATCHEDADDITION VALUES(2, 'tami', 20)
DROP TABLE #MATCHEDADDITION
, который имеет следующие значения:
1 john 60
1 john 50
1 john 40
1 john 30
1 john 20
1 john 10
1 adam 80
1 adam 50
1 adam 40
1 adam 30
1 adam 20
1 adam 10
2 jill 60
2 jill 50
2 jill 40
2 jill 30
2 jill 20
2 jill 10
2 toni 90
2 toni 50
2 toni 40
2 toni 30
2 tami 80
2 tami 50
2 tami 40
2 tami 30
2 tami 20
То, что я пытаюсь сделать, - это применить оператор к значениям, которые получены определенным образом: значения в каждой группе должны сначала выравниваться по столбцам на основе минимального количества записей, доступных для члена группы. Пример должен объяснить это. В приведенной выше таблице я хочу сначала расположить значения следующим образом:
Members of Group 1
-
60 80 |
50 50 |
40 40 | Arrange these like this and apply a custom
30 30 | operator on the row elements i.e. say addition
20 20 | on 60,80 and 50,50 and 40,40 etc.
10 10 |
-
Members of Group 2
-
60 90 80 |
50 50 50 |
40 40 40 | The size of this is only 4 because that is the min size of a
30 30 30 | member 'toni' in this group
-
Я не считаю себя экспертом по SQL, но хотел бы знать, возможно ли это вообще сделать с помощью запроса, или я должен пойти на традиционный подход курсоров или, возможно, работать автономно, используя язык сценариев. Есть предложения?