如何在SQL表中使用条件选择列值作为列名

时间:2014-03-23 05:56:01

标签: mysql sql

我是SQL的新手。我有一张桌子'客户'它看起来像这样。

enter image description here

我想选择'性别'作为性别专栏和'年龄'作为Age列,就像这样。

enter image description here

我尝试了几种方法,但它仍然没有显示我需要的东西。请帮帮我。

3 个答案:

答案 0 :(得分:10)

一种方法是使用条件聚合

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

另一种方式(如果你只对这两列感兴趣)将是

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';

假设每个姓名都有性别和年龄。情况并非如此,那么使用OUTER JOIN代替INNER JOIN就像这样

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';

输出:

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

这是 SQLFiddle 演示

答案 1 :(得分:2)

我没有对此进行过测试,但尝试这样做:

Select c.Name,
    (Select c2.Value from customers c2 Where c2.Name = c.Name And c2.Field = 'Gender') as Gender,
    (Select c2.Value from customers c2 Where c2.Name = c.Name And c2.Field = 'Age') as Age
From Customers c
Group By c.Name

PS我为糟糕的格式道歉...必须从我的手机输入。

答案 2 :(得分:-3)

您可以使用SHOW COLUMNS FROM Customers获取列的名称

然后只需使用SELECT * FROM Customers来检索数据