Mysql
 sql >> база данни >  >> RDS >> Mysql

Обединяване на еквивалента за n-та ненулева стойност - MySQL

Не съм сигурен дали бих препоръчал използването на това решение... нормализирането на вашите данни винаги е по-добър избор, но исках да отговоря с помощта на обикновен SQL с някои функции за низове. Тази заявка трябва да върне това, което търсите:

SELECT
  Name,
  Changes,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 1)), ',', 1)) as Change1,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 2)), ',', 1)) as Change2,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 3)), ',', 1)) as Change3,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 4)), ',', 1)) as Change4,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 5)), ',', 1)) as Change5,
  REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 6)), ',', 1)) as Change6
FROM (
  SELECT
    Name,
    CONCAT_WS(',', CURRENT, OCT12, SEPT12, AUG12, JUL12, JUN12, MAY12, APR12, ',') as Changes
  FROM
    TableA
) s

Свързвам всички стойности в низ, разделен със запетаи, с две запетаи в края на низа (една запетая така или иначе би била достатъчна, но е по-лесно да поставите две и просто да игнорирате последната...), и тъй като аз m използвайки CONCAT_WS, той автоматично ще пропусне нулеви стойности и полученият низ ще бъде нещо като Aug-12,Jun-12,Apr-12,, .

След това във външната заявка извличам n-тия елемент от низа, използвайки SUBSTRIG_INDEX. Бих препоръчал да нормализирате вашата база данни, но ако имате нужда от бързо решение, това решение може да е добра отправна точка.

Вижте как работи тук .

Моля, обърнете внимание, че не връщам NULL стойности, когато няма промени, а вместо това връщам празни низове. Това може да се промени, ако е необходимо.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Незабавна актуализация на JCombobox в Java

  2. MySQL Преди изтриване тригер, за да избегнете изтриване на множество редове

  3. Най-добра практика за система за версия на mysql данни

  4. MAMP MySQL не разпознава стойностите на my.cnf в OSX

  5. Най-близките места с географска ширина и дължина