mysql pivot - /Kreuztabellen-Abfrage

Frage 1: ich habe eine Tabelle mit den unter-Struktur und-Daten:

app_id  transaction_id  mobile_no   node_id  customer_attribute  entered_value 
100     111             9999999999  1        Q1                  2                             
100     111             9999999999  2        Q2                  1                             
100     111             9999999999  3        Q3                  4                             
100     111             9999999999  4        Q4                  3                             
100     111             9999999999  5        Q5                  2                             
100     222             8888888888  4        Q4                  1                             
100     222             8888888888  3        Q3                  2                             
100     222             8888888888  2        Q2                  1                             
100     222             8888888888  1        Q1                  3                             
100     222             8888888888  5        Q5                  4                             

Möchte ich die Anzeige dieser Datensätze in der unten format:

app_id  |  transaction_id  | mobile     |  Q1  |  Q2  |  Q3  |  Q4 |  Q5  |
 100    |      111         | 9999999999 |   2  |   1  |   4  |  3  |  2   |
 100    |      222         | 8888888888 |   3  |   1  |   2  |  1  |  4   |

Ich weiß, ich muss zu verwenden Kreuztabellen/pivot-Abfrage zum abrufen dieser Anzeige. Für diese habe ich versucht es über die wenigen Kenntnisse, die ich über es. Folgende ist meine Abfrage:

SELECT app_id, transaction_id, mobile_no,
  (CASE node_id WHEN 1 THEN entered_value ELSE '' END) AS user_input1,
  (CASE node_id WHEN 2 THEN entered_value ELSE '' END) AS user_input2,
  (CASE node_id WHEN 3 THEN entered_value ELSE '' END) AS user_input3,
  (CASE node_id WHEN 4 THEN entered_value ELSE '' END) AS user_input4,
  (CASE node_id WHEN 5 THEN entered_value ELSE '' END) AS user_input5
FROM trn_user_log 
GROUP BY app_id, transaction_id, mobile_no, node_id

Und basierend auf dieser Abfrage, ich habe die unten angezeigt:

app_id  transaction_id  mobile_no   user_input1  user_input2  user_input3  user_input4  user_input5  
100     111             9999999999  2                                                                
100     111             9999999999               1                                                   
100     111             9999999999                            4                                      
100     111             9999999999                                         3                         
100     111             9999999999                                                      2            
100     222             8888888888  3                                                                
100     222             8888888888               1                                                   
100     222             8888888888                            2                                      
100     222             8888888888                                         1                         
100     222             8888888888                                                      4            

Kann mir jemand helfen mit den richtigen änderungen, die ich machen muss zu meiner Abfrage, um die Datensätze in einer einzelnen Zeile und nicht mehrere Zeilen wie oben.

Frage 2: Auch ist es ein Weg, um den Wert eines bestimmten Feldes als der NAME der Spalte. Wie Sie sehen können, habe ich oben user_input1, user_input2 ... als der header. Stattdessen möchte ich die Werte in customer_attribute als überschrift der Spalten.

Dafür habe ich überprüft NAME_CONST(name,value) wie folgt:

SELECT app_id, transaction_id, mobile_no,
NAME_CONST(customer_attribute, (CASE node_id WHEN 1 THEN entered_value ELSE '' END))
FROM trn_user_log 

Aber es gibt einen Fehler,

Error Code : 1210 Incorrect arguments to NAME_CONST

Hilfe erforderlich.

InformationsquelleAutor DarkKnightFan | 2012-09-12

Schreibe einen Kommentar