Member 12505620 Ответов: 2

Сумма нескольких динамических столбцов


У меня есть столик. Я хочу получить сумму столбцов от s1 до s13.
konu_id   s1 s2 s3  s4 s5 s6 s7 s8 s9 s10 s11 s12 s13  total
   1      5  3   2  0   6   0   4   2   1   4    6    0    1


Что я уже пробовал:

Но проблема в том, что эти столбцы являются переменными. Иногда это может быть от s1 до s8, иногда это может быть от s1 до s10. Я попробовал эти kods, но я мог бы быть успешным.

for x=1 to 13
Set rs = server.createobject("adodb.recordset") 
sql = "select konu_id, sum(s"&x&") AS TOPLAM from students GROUP BY konu_id"
rs.Open sql, conn, 1, 3 
Next

0x01AA

Что вы имеете в виду, говоря "столбцы являются переменными"? Вы имеете в виду, что s9 - s13 равны нулю?

2 Ответов

Рейтинг:
2

OriginalGriff

У вас не может быть "динамических" имен столбцов, если вы не создадите инструкцию SQL, которая включает только нужные столбцы: то, как вы это делаете, генерирует несколько команд, каждая из которых суммирует один столбец.
Вместо этого используйте цикл для построения списка, затем включите его в команду SQL и выполните ее только один раз.


Рейтинг:
2

Maciej Los

Если я вас хорошо понимаю...

Попробовать это:

for x=1 to 13
     sql = sql & "s" & x & " + "
Next

sql = Left$(sql, Len(sql)-3) 'remove last " + "
sql = "select " & sql & " AS TOPLAM from students WHERE konu_id = 1;"
Set rs = server.createobject("adodb.recordset") 
rs.Open sql, conn, 1, 3 


Результат:
select s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12 + s13 AS TOPLAM from students WHERE konu_id = 1;


Member 12505620

Привет Мацей Лос;
Во-первых, спасибо за вашу заботу.Ваш код работает правильно только для одной строки, но у меня есть datatable, и я хочу, чтобы он вычислял каждую строку отдельно. Как я могу изменить эту строку
в SQL = SQL и усилителя; amp; "вместо" &амп; х &амп; " + "
для каждого ряда?

Maciej Los

Поэтому не используйте оператор WHERE. Это все.

Member 12505620

Я попытался опустить, где, но тогда он собирает каждую строку снова с строкой выше в каждый раз.
в SQL = SQL и усилителя; amp; "вместо" &амп; х &амп; " + "

Например : результат 1-й строки : 1+0+0+0+0+3+0+0+0+0+0+0
Результат 2-й строки : 1+0+0+0+0+3+0+0+0+0+0+00+0+0+3+0+2+1+0+0+0+0+1
Результат 3-й строки :1+0+0+0+0+3+0+0+0+0+0+00+0+0+3+0+2+1+0+0+0+0+10+0+0+0+0+0+0+0+0+0+0+0
и т.д.

Maciej Los

Вам не нужно петлять по строкам!
Заявление:

select s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12 + s13 AS TOPLAM from students

should возвращает результирующий набор (коллекцию строк), где каждая отдельная строка имеет сумму столбцов.

Member 12505620

Когда я попробовал этот код, появилась пустая страница. Я думаю, что as toplam не работает.
(выберите s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 + s11 + s12 + s13 в качестве топлама от студентов)