[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: IF MYSQL
dir3
Не работал не разу с оператором IF прошу помощи

данные SELECT возвращает значения
нужно сделать если значения < 0 то вставляет NULL

SELECT COUNT(`tel_client_from_doc`) AS TELEFON
FROM `documente`
JOIN membrii ON documente.ID_MEMBRU_SUPPORT = membrii.ID_MEMBRU
WHERE login ='ABxx'
AND IS_STARE_DOC =2
AND data_close_DOC
BETWEEN '2012-02-01'
AND '2012-02-02'



Спустя 8 минут, 25 секунд (2.03.2012 - 12:06) Visman написал(а):
Зачем тут JOIN? Почему ни где в запросе, кроме джойна, не указывается какое поле какой таблице принадлежит?

Спустя 42 минуты, 23 секунды (2.03.2012 - 12:48) dir3 написал(а):
SELECT COUNT( `tel_client_from_doc` ) AS TELEFON
FROM `documente`
JOIN membrii ON documente.ID_MEMBRU_SUPPORT = membrii.ID_MEMBRU
WHERE membrii.login = 'ABxx'
AND IS_STARE_DOC =2
AND documente.data_close_DOC
BETWEEN '2012-02-01'
AND '2012-02-02'

Спустя 13 минут, 8 секунд (2.03.2012 - 13:01) dir3 написал(а):
суть в том что мне должна мне нужна чтоб вывело таки результат
Login	01.feb	02.feb	03.feb	04.feb	05.feb	06.feb	07.feb
ABxx 2 1 1


где номера 1 , 2, это номера закрытых заявок за данное число

join стоит потому что в таблице documente есть id юзера (ID_MEMBRU_SUPPORT) который равен ID_MEMBER из таблицы membrii и в таблицы membrii есть данные о логине и департамента, хочу построить pivot table базируется на данном примере
select name,
if(exam=1,score,null) as exam1,
if(exam=2,score,null) as exam2,
if(exam=3,score,null) as exam3,
if(exam=4,score,null) as exam4

Спустя 2 минуты, 51 секунда (2.03.2012 - 13:04) Visman написал(а):
Смотрю я на этот запрос и что-то меня сомнения берут:
Он возвращает одну строку с одним полем, т.е. одно число!? Или я не прав?

Спустя 6 минут, 48 секунд (2.03.2012 - 13:11) dir3 написал(а):
ты прав но это наброски
этот SELECT выбирает количество закрытых заявок 1 числа то есть юзер ABxx закрыл в 2012-02-01 2 заявки

Спустя 8 минут, 3 секунды (2.03.2012 - 13:19) Visman написал(а):
Можно заменить
SELECT COUNT(`tel_client_from_doc`) AS TELEFON

на
SELECT if(COUNT(`tel_client_from_doc`)<0, NULL, COUNT(`tel_client_from_doc`)) as TELEFON

Но возможно тормоза будут

Спустя 40 секунд (2.03.2012 - 13:20) dir3 написал(а):
Login	01.feb	02.feb	03.feb	04.feb	05.feb	06.feb	07.feb
ABxx 2 1 1
  • в pivot table нужно чтобы было
  • Login это row header
  • 01.feb,02..... это colum header
  • ABxx 01.feb это distinc values
  • значения 2 ,1 это calculated values





Спустя 14 минут, 26 секунд (2.03.2012 - 13:34) Visman написал(а):
Чтобы разбить по дням группируй относительно
MONTHNAME(documente.data_close_DOC), DAYOFMONTH(documente.data_close_DOC)


Чтобы получить примерно это 01.feb бери
CONCAT(DAYOFMONTH(documente.data_close_DOC),' ',MONTHNAME(documente.data_close_DOC)

Спустя 55 минут, 56 секунд (2.03.2012 - 14:30) dir3 написал(а):
а тут что он хочет

#1248 - Every derived table must have its own alias


SELECT *
FROM
(SELECT login AS login, CONCAT( DAYOFMONTH( documente.data_close_DOC ) , ' ', MONTHNAME( documente.data_close_DOC ) ) AS DATE, tel_client_from_doc AS telefon
FROM `documente`
JOIN membrii ON documente.ID_MEMBRU_SUPPORT = membrii.ID_MEMBRU
WHERE membrii.login = 'ABaciu'
AND IS_STARE_DOC =2
AND documente.data_close_DOC
BETWEEN '2012-02-01'
AND '2012-02-02')

Спустя 9 минут, 45 секунд (2.03.2012 - 14:40) Visman написал(а):
Цитата (dir3 @ 2.03.2012 - 19:30)
#1248 - Every derived table must have its own alias

Каждая таблица должна иметь свой псевдоним.

Еще в этом запросе двойной SELECT мне кажется лишний.

Спустя 3 часа, 18 минут (2.03.2012 - 17:58) dir3 написал(а):
Преобразования Столбца в строку в mysql
Реально ????

SELECT date



что типа 01.feb 02.feb 03.feb 04.feb 05.feb 06.feb 07.feb






Спустя 31 минута, 33 секунды (2.03.2012 - 18:29) Visman написал(а):
Цитата (dir3 @ 2.03.2012 - 22:58)
Преобразования Столбца в строку в mysql
Реально ????

Я о таком не слышал.

Спустя 11 дней, 18 часов, 52 минуты, 58 секунд (14.03.2012 - 13:22) dir3 написал(а):
реализовал такои скрипт

$i=0;

$str = '';
while ($i < $countE)

{

$str.= "SUM(CASE date WHEN '$aryRange[$i]' THEN 1 ELSE 0 END) '$aryRange[$i]',";

$i++;

};







$sql = "SELECT login,".$str."sum(1) as TOTAL FROM
(SELECT membrii.login AS login, CONCAT( DAYOFMONTH( documente.data_close_DOC ) , ' ', MONTHNAME( documente.data_close_DOC ) ) AS date
FROM membrii AS membrii
LEFT JOIN `documente` AS documente ON documente.ID_MEMBRU_SUPPORT = membrii.ID_MEMBRU
WHERE id_functia =7
AND documente.IS_STARE_DOC =2
AND documente.data_close_DOC
BETWEEN '
$strDateFrom 00:00:00'
AND '
$iDateFrom 23:59:59') AS PIVOT GROUP BY login";


Login	01.feb	02.feb	03.feb	04.feb	05.feb	06.feb	TOTAL
ABxx 2 1 3
ABYx 2 3 5


есть соображения чтобы подсчитать сумму цифры из столбца ??

типа
Login	01.feb	02.feb	03.feb	04.feb	05.feb	06.feb	TOTAL
ABxx 2 1 3
ABYx 2 3 5
SUM 6 4 8


select в БД


SELECT login, 
SUM(CASE date WHEN '1 March' THEN 1 ELSE 0 END) '1 March',
SUM(CASE date WHEN '2 March' THEN 1 ELSE 0 END) '2 March',
SUM(CASE date WHEN '3 March' THEN 1 ELSE 0 END) '3 March', sum(1)
FROM
(SELECT membrii.login AS login, CONCAT( DAYOFMONTH( documente.data_close_DOC ) , ' ', MONTHNAME( documente.data_close_DOC ) ) AS date
FROM membrii AS membrii
LEFT JOIN `documente` AS documente ON documente.ID_MEMBRU_SUPPORT = membrii.ID_MEMBRU
WHERE id_functia =7
AND documente.IS_STARE_DOC =2
AND documente.data_close_DOC
BETWEEN '2012-03-01 00:00:00'
AND '2012-03-21 23:59:59') AS PIVOT GROUP BY login




Спустя 22 часа, 2 минуты, 22 секунды (15.03.2012 - 11:25) dir3 написал(а):
Модифицировал Select и всё ок

$sql ="SELECT IFNULL(login,'TOTALS') AS login,".$str."sum(1) as TOTAL FROM
(SELECT membrii.login AS login, CONCAT( DAYOFMONTH( documente.data_close_DOC ) , ' ', MONTHNAME( documente.data_close_DOC ) ) AS date
FROM membrii AS membrii
LEFT JOIN `documente` AS documente ON documente.ID_MEMBRU_SUPPORT = membrii.ID_MEMBRU
WHERE id_functia =7
AND documente.IS_STARE_DOC =2
AND documente.data_close_DOC
BETWEEN '$strDateFrom 00:00:00'
AND '$iDateFrom 23:59:59') AS PIVOT GROUP BY login WITH ROLLUP"
;
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.