Сведения о вопросе

Killer

22:21, 2nd August, 2020

Теги

MySQL   SQL    

Cоставлениe sql-запроса, пожалуйста?

Просмотров: 340   Ответов: 5

Есть таблица, в которой два столбца, один со значениями, другой с их статусами (например: если статус 1, то значение относится к производимой продукции, если статус 2, то значение относится к реализованной продукции). Необходимо, что бы запрос брал значение из первого столбца на основе значения во втором столбце, а на выходе получалось два отдельных столбца с произведенной и реализованной продукцией. Хотелось бы сделать это одним запросом.


Допустим есть запрос:
SELECT value as value1, value as value2, status

необходимо, что бы в зависимости от поля status, данные из поля value попадали либо в value1 либо в value2.



  Сведения об ответе

appple

19:35, 26th August, 2020

SELECT IF(status=1, value, NULL) AS value1, IF(status=2, value, NULL) AS value2 FROM table


  Сведения об ответе

+-*/

13:32, 24th August, 2020

примерно так
(SELECT value1 FROM table WHERE status = 1) UNION (SELECT value2 FROM table WHERE status = 2)
Написал на скорую руку, могу ошибатся… если скинете дамп данных — помогу точнее:)


  Сведения об ответе

ASSembler

06:30, 7th August, 2020

Как я понял вам надо вот что:

SELECT 
    IF(status = 1, value, NULL) AS value1,
    IF(status = 2, NULL, value) AS value2,
    status
FROM table
WHERE 1


Тогда у вас в value1 будет null для всей продукции со статусом 2, а в value2 будет NULL для продукци со статусом 1


  Сведения об ответе

screen

07:00, 16th August, 2020

Приведенные примеры работают, но если ввести ограничение по дате, то все рушится.

Например так:

SELECT
DATE_FORMAT(dtcreate, '%d %M %Y') as dtcreate,
IF(state = 1, sum(plumb), NULL) AS value1,
IF(state = 3, sum(plumb), NULL) AS value2
FROM tblplumb
WHERE 1
GROUP BY DATE_FORMAT(dtcreate, '%d .%m.%Y')


работает, а так:

SELECT
DATE_FORMAT(dtcreate, '%d %M %Y') as dtcreate,
IF(state = 1, sum(plumb), NULL) AS value1,
IF(state = 3, sum(plumb), NULL) AS value2
FROM tblplumb
WHERE dtcreate BETWEEN @start AND @STOP
GROUP BY DATE_FORMAT(dtcreate, '%d .%m.%Y')


уже не работает, и если попробовать вставить ограничение в условие if — тоже не работает.

С вариантом:

SELECT value*(status=1) AS value1, value*(state=2) AS value2 FROM table

та же беда…


  Сведения об ответе

fo_I_K

14:42, 25th August, 2020

Если для Oracle, то попробуйте так. Если не оракл, то можно вместо CASE использовать DECODE
select
case
when value = 1 then status end value1,
case
when value = 2 then status end value2
from table


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться