2014-11-07 4 views
0

Привет, у меня есть «sql query», чтобы увидеть номер задания, выполненного для каждого участника за последнюю неделю, поэтому я создаю «sql-запрос», и это очень хорошо работает, но я хочу изменить alise из week1 или week2 к данные этой недели мой «запрос SQL» является:mysql - Динамический псевдоним столбца

SELECT `staffID`, 
SUM(if (created_at BETWEEN NOW()-INTERVAL 1 WEEK AND NOW(), 1,0)) 
AS `week1`, 
SUM(if (created_at BETWEEN NOW()-INTERVAL 2 WEEK AND NOW()-INTERVAL 1 WEEK, 1,0)) 
AS `week2`, 
FROM tasks where status ='done' 
GROUP BY `staffID 

, и я хочу стать, как этот «запрос SQL», но MySQL дает мне ошибку. Итак, есть ли решение проблемы?

SELECT `staffID`, 
SUM(if (created_at BETWEEN NOW()-INTERVAL 1 WEEK AND NOW(), 1,0)) 
AS NOW()-INTERVAL 1 WEEK, 
SUM(if (created_at BETWEEN NOW()-INTERVAL 2 WEEK AND NOW()-INTERVAL 1 WEEK, 1,0)) 
AS NOW()-INTERVAL 2 WEEK, 
FROM tasks where status ='done' 
GROUP BY `staffID 

SQL дает мне это сообщение:

1064 - у Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «NOW() - INTERVAL 1 WEEK

+0

Объясните, что вы делаете? –

ответ

4

Ответ прост: в SQL это невозможно. Имена столбцов - это константы. Вам нужно будет создать запрос динамически, чтобы достичь того, чего вы хотите:

SET @column_alias1 := NOW() - INTERVAL 1 WEEK; 
SET @column_alias2 := NOW() - INTERVAL 2 WEEK; 
SET @query := CONCAT('SELECT SUM(...) AS `', @column_alias1, '`, SUM(...) AS `', @column_alias2, '` FROM ...'); 
PREPARE dynamic_statement FROM @query; 
EXECUTE dynamic_statement; 
+0

Просто мысль, как бы вы предложили решение для этой же проблемы, но с большим количеством столбцов? – YehCheez

+0

@YehCheez: У меня никогда не было этой проблемы, потому что я использую SQL для чего это: язык, чтобы дать мне данные. Если я хочу отображать информацию в заголовке столбца в своем приложении или на веб-сайте, я не изменяю запрос, но использую язык программирования под рукой (C#, PHP, что угодно). В редком случае, когда я должен создать запрос динамически, я также делаю это в своем приложении с помощью циклов, если/then/else и все остальное, что предлагает мой язык программирования, чтобы облегчить работу. –

+0

Это имеет смысл. Язык программирования может обрабатывать эти вещи лучше, чем SQL. – YehCheez

0

Проверьте, не работает ли он.

Добавлена ​​скобка для названия столбца.

SELECT `staffID`, 
SUM(if (created_at BETWEEN NOW()-INTERVAL 1 WEEK AND NOW(), 1,0)) 
AS (SELECT NOW()-INTERVAL 1 WEEK), 
SUM(if (created_at BETWEEN NOW()-INTERVAL 2 WEEK AND NOW()-INTERVAL 1 WEEK, 1,0)) 
AS (SELECT NOW()-INTERVAL 2 WEEK), 
FROM tasks where status ='done' 
GROUP BY `staffID 
+0

не работает, та же проблема –

+0

Checket it now, добавлено ключевое слово select. –

+0

по-прежнему та же проблема –

Смежные вопросы