Это хороший ответ, из 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;
}
?>
Вы довольно близко:
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;
Кроме того, вы можете посмотреть на пивот.
Вы можете агрегировать, используя 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