2015-12-29 5 views
0

Я создаю представление, которое выбирает различное число столбцов из различных таблиц, накапливающих большое количество столбцов в представлении сказатьСумма значений столбцов динамически MySql

col1, col2,..............,coln 

Когда мне нужна сумма всех этих столбцов мне нужно написать как

SELECT col1+col2+............+coln FROM myview 

Я хочу получить трюк, чтобы получить сумму, не указывая на все имя столбца.

+2

Nope. , , в SQL нет такого трюка. Вероятно, проблема связана с тем, что вы сохранили значения в столбцах, где должна быть одна строка за одно значение, а не один столбец за значение. Тогда вы можете использовать 'sum()'. –

+1

Нет сокращения SQL для того, чего вы пытаетесь достичь. Не может быть сделано. – spencer7593

+0

Если тип данных всех выбранных столбцов одинаковый, то, как говорит @GordonLinoff, вы должны извлекать их как строки вместо столбцов. Вы можете добиться этого (выборка как строки), используя предложение SELECT с UNION. –

ответ

2

Вам нужен динамический SQL, чтобы сделать это:
http://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html

Пример:

SELECT concat('SELECT ', group_concat(COLUMN_NAME SEPARATOR '+'), 
       ' FROM ', 'myview') 
FROM information_schema.columns 
WHERE TABLE_NAME= 'myview' 
INTO @s; 
PREPARE stmt FROM @s; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

рабочей демонстрационного на SQLFiddle: http://sqlfiddle.com/#!9/4835b/1