0

这是我的问题的示例表:

数据库:MySql 5.1
表名:教育

id edutype 大学科目 yearofpass percentmarks 
200 1 CBSE 数学、科学、英语、印地语 2002 78.00
200 2 CBSE 数学、物理、化学、生物学 2004 68.00
200 3 WBUT 计算机科学工程 2008 87.00
100 1 ICSE 数学、科学、英语、印地语 2001 72.
100 2 CBSE 数学、物理、化学、生物学 2003 65.00
100 3 NIT 电子工程 2008 75.00
300 1 CBSE 数学、科学、英语、印地语 2003 65.00
300 2 CBSE 数学、物理、化学、生物学 2005 63.00
300 3 维特冶金工程 2009 79.00

现在我想运行一个 sql 查询,它将以以下格式输出结果:

id uvr1 sub1 yop1 pcm1 uvr2 sub2 yop2 pcm2 uvr3 sub3 yop3 pcm3 
200 CBSE Maths,Science,English,Hindi 2002 78.00 CBSE Maths,Physics,Chem,Biology 2004 68.00 WBUT Computer Science Engineering 2008 87.00
100 ICSE Maths,Science,English,English 72.00 CBSE 数学、物理、化学、生物学 2003 65.00 NIT 电子工程 2008 75.00
300 CBSE 数学、科学、英语、印地语 2003 65.00 CBSE 数学、物理、化学、生物学 2005 63.00 VIT 冶金工程 2009 79.00

如果您有任何好的方法来实现这一点,请分享,需要您的帮助。

提前致谢

4

3 回答 3

0

您将尝试 CONCAT 和 SUBSTRING 函数以及嵌套的 SELECT。喜欢:

SELECT SUBSTRING(CONCAT(subjects, 
(
SELECT subjects FROM education WHERE university=CBSE and rownum=2
)),0,27) 
FROM education WHERE university='CBSE' and rownum=1;

但这是非常糟糕且不一致的解决方案。在你的位置,我会尝试重新组织选择的要求。也许没有你提到的这样的输出。

于 2013-04-30T08:07:14.570 回答
0

你可以试试这个:

SELECT 
    e1.id,
    e1.university as uvr1,
    e1.subjects as sub1,
    e1.yearofpass as yop1,
    e1.percentmarks as pcm1,
    e2.university as uvr2,
    e2.subjects as sub2,
    e2.yearofpass as yop2,
    e2.percentmarks as pcm2,
    e3.university as uvr3,
    e3.subjects as sub3,
    e3.yearofpass as yop3,
    e3.percentmarks as pcm3
FROM 
    Education as e1
LEFT JOIN Education as e2
    ON e1.id = e2.id
    AND e2.edutype = e1.edutype+1
LEFT JOIN Education as e3
    ON e1.id = e3.id
    AND e3.edutype = e1.edutype+2
WHERE
    e1.edutype = 1

但是...这仅适用于您不再拥有具有相同 ID 的 3 所大学,如果您有更多需要添加额外的连接。

另外看看你的表结构,我认为你应该阅读更多关于数据库规范化的信息,它可以帮助你。

你可以这样做:

在此处输入图像描述

于 2013-04-30T08:08:20.293 回答
0

虽然以下形式的 PIVOT TABLE 查询在 MySQL 中是完全可能的,但在大多数情况下,最好按照 eggyal 的建议在应用程序级别处理此类事情......

SELECT id
     , MAX(CASE WHEN edutype = 1 THEN university END) uvr1
     , MAX(CASE WHEN edutype=1 THEN subjects END) sub1 
  FROM education 
 GROUP 
    BY id;
于 2013-04-30T08:37:43.513 回答