Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
982 views
in Technique[技术] by (71.8m points)

mysql - How to select Column value as Column name with conditions in SQL table

I'm new to SQL. I have a table 'Customers' and it looks like this.

enter image description here

I would like to select 'Gender' AS Gender Column and 'Age' as Age column which would be like this.

enter image description here

I've tried several ways but it still doesn't show what I need. Please help me.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

One way to go about it is to use conditional aggregation

SELECT name,
       MAX(CASE WHEN field = 'Gender' THEN value END) gender,
       MAX(CASE WHEN field = 'Age' THEN value END) age
  FROM customers
 GROUP BY name

The other way (if you're interested only in these two columns) would be

SELECT c1.name, c1.value gender, c2.value age
  FROM customers c1 JOIN customers c2
    ON c1.name = c2.name
   AND c1.field = 'Gender'
   AND c2.field = 'Age';

Assumption is that both Gender and Age exist for each Name. It it's not the case then use an OUTER JOIN instead of an INNER JOIN like so

SELECT n.name, c1.value gender, c2.value age
  FROM
(
  SELECT DISTINCT name
    FROM customers
) n LEFT JOIN customers c1
    ON n.name = c1.name AND c1.field = 'Gender' 
    LEFT JOIN customers c2
    ON n.name = c2.name AND c2.field = 'Age';

Output:

|   NAME | GENDER | AGE |
|--------|--------|-----|
| Angela | Female |  28 |
|  Davis |   Male |  30 |

Here is SQLFiddle demo


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...