Хорошо, сначала вам нужно взять сумку. Мне было поручено оптимизировать несколько старых хранимых процедур в нашей базе данных. Этот SP делает следующее:
1) курсор проходит через серию «зданий»
2) курсор зацикливается на неделю, воскресенье-суббота
3) имеет огромный набор блоков ПЧ, отвечающих за подсчет количества объектов того или иного типа в данном здании
По сути, вы увидите, что в этом блоке кода, если есть 5 объектов типа # 2, он увеличит @ Type_2_Objects_5 на 1.
</p>
<pre><code> IF @Number_Type_1_Objects = 0
BEGIN
SET @Type_1_Objects_0 = @Type_1_Objects_0 + 1
END
IF @Number_Type_1_Objects = 1
BEGIN
SET @Type_1_Objects_1 = @Type_1_Objects_1 + 1
END
IF @Number_Type_1_Objects = 2
BEGIN
SET @Type_1_Objects_2 = @Type_1_Objects_2 + 1
END
IF @Number_Type_1_Objects = 3
BEGIN
SET @Type_1_Objects_3 = @Type_1_Objects_3 + 1
END
[... Objects_4 through Objects_20 for Type_1]
IF @Number_Type_2_Objects = 0
BEGIN
SET @Type_2_Objects_0 = @Type_2_Objects_0 + 1
END
IF @Number_Type_2_Objects = 1
BEGIN
SET @Type_2_Objects_1 = @Type_2_Objects_1 + 1
END
IF @Number_Type_2_Objects = 2
BEGIN
SET @Type_2_Objects_2 = @Type_2_Objects_2 + 1
END
IF @Number_Type_2_Objects = 3
BEGIN
SET @Type_2_Objects_3 = @Type_2_Objects_3 + 1
END
[... Objects_4 through Objects_20 for Type_2]
Помимо того, что он чрезвычайно хакерский (и ограничен количеством объектов в 20), он кажется ужасным способом справиться с этим. На традиционном языке это можно легко решить с помощью двумерного массива ...
objects[type][quantity] += 1;
Я новичок в T-SQL, но, поскольку при написании хранимых процедур часто используется много временных таблиц (которые, по сути, могут быть двумерными массивами), мне было интересно, сможет ли кто-нибудь осветить лучший способ обработки ситуации, такой как это с двумя динамическими частями данных для хранения.
Запрошено в комментариях
Столбцы просто
- Number_Type_1_Objects
- Number_Type_2_Objects
- Number_Type_3_Objects
- Number_Type_4_Objects
- Number_Type_5_Objects
- CurrentDateTime.
Каждая строка в таблице представляет 5 минут.
Ожидаемый результат - определить процент времени, в течение которого определенное количество объектов присутствует в течение каждого дня.
Sunday - Object Type 1
0 objects - 69 rows, 5:45, 34.85%
1 object - 85 rows, 7:05, 42.93%
2 objects - 44 rows, 3:40, 22.22%
В воскресенье было 0 объектов типа 1 на 34,85% дня. Был 1 объект на 42,93% дня и 2 объекта на 22,22% дня. Повторите для каждого типа объекта.