我是SQL的新手。我有一张桌子'客户'它看起来像这样。
我想选择'性别'作为性别专栏和'年龄'作为Age列,就像这样。
我尝试了几种方法,但它仍然没有显示我需要的东西。请帮帮我。
答案 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
来检索数据