SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.07.2011 17:33:27

priroda
Участник
Зарегистрирован: 30.06.2011
Сообщений: 9

case

SELECT code_id,CASE WHEN  ( pole='1')
            THEN
                sum(pole1) sum1
             ELSE
                sum(pole2) sum2l

            END SUMMA

FROM 'tab'


вопрос:можно ли использовать  в mysql CASE?
ругается

Неактивен

 

#2 07.07.2011 17:59:02

DJK
Завсегдатай
Зарегистрирован: 09.08.2009
Сообщений: 32

Re: case

SELECT code_id,CASE WHEN  ( pole='1')
            THEN
                sum(pole1)
             ELSE
                sum(pole2)
           END summa
FROM 'tab'

Отредактированно DJK (07.07.2011 17:59:30)

Неактивен

 

#3 08.07.2011 09:59:50

priroda
Участник
Зарегистрирован: 30.06.2011
Сообщений: 9

Re: case

Спасибо.Но мне в дальнейшем как тогда обращаться к этой сумме?В оракле я бы по алиасу обращалась,а здесь?

Неактивен

 

#4 08.07.2011 10:01:32

priroda
Участник
Зарегистрирован: 30.06.2011
Сообщений: 9

Re: case

и потом у меня гораздо больше проверок в этом запросе,это я для простоты написала так.

Неактивен

 

#5 08.07.2011 12:38:56

priroda
Участник
Зарегистрирован: 30.06.2011
Сообщений: 9

Re: case

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

SELECT st, code_id, sum( pole1 ) sumpole1
FROM `tab`
GROUP BY st, code_id

В итоге я получаю:
st    code_id   sumpole1
1       1           6
1       2           15
1       3          11
2       1          2021
2       2          6
2       3          44
2       4          2
НО я бы хотела все сформировать по-другому.Просуммировать в зависимости от
значения st,code_id и при этом получить суммы поля sum(pole1)  c разным алиасом
в зависимости от st,code_i.При этом все(мой пример) выстроится в 2 строки в зависимости от st:
st  sumpole1  sumpole2  sumpole3  sumpole4
1    6            15               11          0
2    2021        6                44         2
мне бы как-то так надо:

SELECT st,code_id, CASE WHEN (code_id=1) THEN sum(pole1) sum1
WHEN (code_id=2) THEN sum(pole1) sum2
WHEN (code_id=3) THEN sum(pole1) sum3
WHEN (code_id=4) THEN sum(pole1) sum4 ELSE rest END

FROM `tab`
GROUP BY st,code_id

Т.е. это возможно при помощи CASE WHEN........

SELECT st,CASE WHEN  ( pole='1')
            THEN
                sum(pole1)
             ELSE
                sum(pole2)
           END summa
FROM 'tab'

sum(expense)sumprihod

Неактивен

 

#6 09.07.2011 12:41:45

DJK
Завсегдатай
Зарегистрирован: 09.08.2009
Сообщений: 32

Re: case

В MySQL, насколько я понимаю,
псевдонимы можно использовать для ссылки на столбец в GROUP BY, ORDER BY или в части HAVING, а также для лучшего именования столбцов.
В Where, Case, If их использовать нельзя по причине возможной ситуации когда они не определены.
В связи с этим сделать GROUP вашей выборки в 2 строки не удастся.
Можно конечно извращаться через переменные, но прямого метода нет.

Отредактированно DJK (09.07.2011 13:10:45)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson