Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Równoważnik łączenia dla n-tej niezerowej wartości - MySQL

Nie jestem pewien, czy polecałbym to rozwiązanie... normalizacja danych zawsze jest lepszym wyborem, ale chciałem odpowiedzieć zwykłym SQL z kilkoma funkcjami stringów. To zapytanie powinno zwrócić to, czego szukasz:

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

Łączę wszystkie wartości w ciągu oddzielonym przecinkami, z dwoma przecinkami na końcu ciągu (jeden przecinek i tak by wystarczył, ale łatwiej jest umieścić dwa i po prostu zignorować ostatni...), a ponieważ ja' m używając CONCAT_WS automatycznie pominie wartości null, a wynikowy ciąg będzie podobny do Aug-12,Jun-12,Apr-12,, .

Następnie w zapytaniu zewnętrznym wyodrębniam n-ty element ciągu, używając SUBSTRIG_INDEX. Zalecam normalizację bazy danych, ale jeśli potrzebujesz szybkiej naprawy, to rozwiązanie może być dobrym punktem wyjścia.

Zobacz, jak działa tutaj .

Proszę zauważyć, że nie zwracam wartości NULL tam, gdzie nie ma zmian, ale zamiast tego zwracam puste ciągi. Można to zmienić w razie potrzeby.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Próbuję opublikować tylko jedną kolumnę w bazie danych

  2. Kolejność wyszukiwania pełnotekstowego MYSQL według trafności

  3. Przechowywanie plików w bazie danych Vs system plików

  4. Operator porównania MySQL, spacje

  5. Konwertuj datę na format daty MYSQL