Как объединить несколько строк в одну в SQL?

Это хороший ответ, из http://php.net/manual/es/class.mysqli-result.php

=mysqli_num_rows($result)) return false;
    if (is_string($field) && !(strpos($field,".")===false)) {
        $t_field=explode(".",$field);
        $field=-1;
        $t_fields=mysqli_fetch_fields($result);
        for ($id=0;$idtable==$t_field[0] && $t_fields[$id]->name==$t_field[1]) {
                $field=$id;
                break;
            }
        }
        if ($field==-1) return false;
    }
    mysqli_data_seek($result,$row);
    $line=mysqli_fetch_array($result);
    return isset($line[$field])?$line[$field]:false;
}
?>

0
задан PSK 23 February 2019 в 15:06
поделиться

2 ответа

Вы довольно близко:

SELECT CUST_ID,
    max(CASE WHEN "ATTR ID"=1 THEN "ATTR_VALUE" END) AS ATTR_ID_1,
    max(CASE WHEN "ATTR ID"=2 THEN "ATTR_VALUE" END) AS ATTR_ID_2,
    max(CASE WHEN "ATTR ID"=3 THEN "ATTR_VALUE" END) AS ATTR_ID_3,
    max(CASE WHEN "ATTR ID"=4 THEN "ATTR_VALUE" END) AS ATTR_ID_4,
    max(CASE WHEN "ATTR ID"=6 THEN "ATTR_VALUE" END) AS ATTR_ID_5,
    max(CASE WHEN "ATTR ID"=7 THEN "ATTR_VALUE" END) AS ATTR_ID_6

FROM "TABLE_NAME" where CUST_ID='20002123'
Group by cust_id;

Кроме того, вы можете посмотреть на пивот.

0
ответ дан Gauravsa 23 February 2019 в 15:06
поделиться

Вы можете агрегировать, используя GROUP BY CUST_ID, чтобы получить несколько строк как одну строку.

Попробуйте изменить запрос следующим образом.

SELECT CUST_ID, 
       Max(ATTR_ID_1) AS ATTR_ID_1, 
       Max(ATTR_ID_2) AS ATTR_ID_2, 
       Max(ATTR_ID_3) AS ATTR_ID_3, 
       Max(ATTR_ID_4) AS ATTR_ID_4, 
       Max(ATTR_ID_5) AS ATTR_ID_5, 
       Max(ATTR_ID_6) AS ATTR_ID_6 
FROM   (SELECT CUST_ID, 
               CASE WHEN "ATTR ID" = 1 THEN "ATTR_VALUE"  END AS ATTR_ID_1, 
               CASE WHEN "ATTR ID" = 2 THEN "ATTR_VALUE"  END AS ATTR_ID_2, 
               CASE WHEN "ATTR ID" = 3 THEN "ATTR_VALUE"  END AS ATTR_ID_3, 
               CASE WHEN "ATTR ID" = 4 THEN "ATTR_VALUE"  END AS ATTR_ID_4, 
               CASE WHEN "ATTR ID" = 6 THEN "ATTR_VALUE"  END AS ATTR_ID_5, 
               CASE WHEN "ATTR ID" = 7 THEN "ATTR_VALUE"  END AS ATTR_ID_6 
        FROM   "TABLE_NAME" 
        WHERE  CUST_ID = '20002123')T 
GROUP  BY CUST_ID 
0
ответ дан PSK 23 February 2019 в 15:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: