sql >> Database teknologi >  >> RDS >> Mysql

Koalescer ækvivalent for n. ikke null værdi - MySQL

Jeg er ikke sikker på, om jeg vil anbefale at bruge denne løsning ... normalisering af dine data er altid et bedre valg, men jeg ønskede at svare ved hjælp af almindelig SQL med nogle strenge funktioner. Denne forespørgsel skulle returnere det, du leder efter:

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

Jeg sammenkæder alle værdier i en kommasepareret streng med to kommaer i slutningen af ​​strengen (et komma ville være nok alligevel, men det er nemmere at sætte to og bare ignorere den sidste...), og da jeg' m ved brug af CONCAT_WS vil den automatisk springe nul-værdier over, og den resulterende streng vil være noget som Aug-12,Jun-12,Apr-12,, .

Så i den ydre forespørgsel udtrækker jeg det n-te element i strengen ved hjælp af SUBSTRIG_INDEX. Jeg vil anbefale at normalisere din database, men hvis du har brug for en hurtig løsning kan denne løsning være et godt udgangspunkt.

Se det fungere her .

Bemærk venligst, at jeg ikke returnerer NULL-værdier, hvor der ikke er ændringer, men jeg returnerer tomme strenge i stedet. Dette kan ændres, hvis du har brug for det.



  1. Brug af Jenkins med Kubernetes AWS, del 2

  2. mysql hamming afstand mellem to phash

  3. Har problemer med en MySQL Join, der skal opfylde flere betingelser

  4. HTML-formular, der ændrer ekkoede variable, men IKKE database?