предотвратить NULL в представлении mysql, де-нормализация - PullRequest
1 голос
/ 16 июля 2010

Я бы хотел сделать что-то подобное, но, конечно, с рабочим синтаксисом:)

MIN(CASE WHEN col=2 
THEN CASE WHEN answer IS NULL THEN 0 ELSE answer END END)

Я пытаюсь запретить представлению получать значения NULL и вместо этого использовать нули.Вот мой запрос SELECT, который создает представление:

SELECT result,question_id,
MIN(CASE WHEN col=1
THEN answer
END) AS col1,
MIN(CASE WHEN col=2 
THEN answer
END) AS col2,
MIN(CASE WHEN col=3
THEN answer
END) AS col3
FROM answers 
GROUP by result,question_id

В основном я получаю хороший результат, который выглядит следующим образом

result   question_id   col1   col2   col3
1            2          10     20      70
2            2          80     20     NULL
3            3          0     100       0

У меня нет проблем с производительностью, и исходная таблицарегулярно обновляется, поэтому я хотел бы остаться с видом, а не sp.Таблица, которую вы видите, рассеивает реляционную структуру опроса, в котором рассматриваются вероятности.К столбцам каждой строки нужно добавить до 100. Если кто-то действительно уверен, что что-то, например, col3, не произойдет, он может либо заполнить 0 для других полей формы, либо оставить поле пустым.Валидатор формы проверяет, только если все это добавляет до 100. Если поле оставить пустым, в реляционной таблице нет записи NO, поэтому в рассредоточенном представлении записывается NULL.

Мне бы очень хотелосьзаставить его написать "0", но я не знаю как!Спасибо за любые предложения заранее!

Ответы [ 2 ]

4 голосов
/ 16 июля 2010

Вы ищете IFNULL(..something...,0)


По-видимому, нужно прописать это:

IFNULL(MIN(CASE WHEN col=3 THEN answer END),0)
1 голос
/ 16 июля 2010
SELECT name AS Name, category AS Category, IF(winter>500, "Sells", "Slow") AS Trend FROM sales;

Это было от http://www.java2s.com/Code/SQL/Flow-Control/UseIFinselectclause.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...