2012-11-16 43 views
1

我的表price_matrix我怎样才能有结果集行显示为列

id service_id deadline edu_level paper_stand price 
------------------------------------------------------ 
1  5   20   GCES  A   50 
2  5   10   GCSE  A   30 
3  5   20   GCSE  B   10 
2  5   10   GCSE  B   40 

我如何编写一个查询,会给我造成以下格式

deadline service_id paper_stand A paper_stand B edu_level 
----------------------------------------------------------------- 
20   5    50    10   GCES 
10   5    30    40   GCSE 

查询我使用是

SELECT `paper_stand` , `deadline` , `price` 
FROM `price_matrix` 
WHERE `edu_level` = 'GCSE/ A Levels' && `service_id` =5 
ORDER BY `paper_stand` , `deadline` 

我使用MYSQL

谁能帮我解释一下我怎样才能得到的结果所需的格式?

谢谢

+0

这就是所谓的 “支点”。语法因RDBMS而异,但您应该可以Google。 –

+0

你还没有真正指定你正在分组的内容。我假设只能有纸架A和B - 没有其他人。在这种情况下,你是按截止日期,服务ID和教育水平分组吗?这些是您的数据透视操作员需要知道的事情。一般来说它是一个更容易做这样的操作在你的显示层,这是否是一份报告,网页或应用程序。 –

+1

期限值应该是多少?是截止日期的最大值还是最小值? –

回答

1

您可以将JOIN表格本身。

SELECT a.deadline, 
     a.service_id, 
     a.price AS paper_stand_a, 
     b.price AS paper_stand_b, 
     a.edu_level 
FROM price_matrix AS a JOIN price_matrix AS b 
    ON a.deadline = b.deadline AND a.paper_stand = 'A' AND b.paper_stand = 'B' 
GROUP BY a.deadline; 

您也可以在没有连接的情况下做到这一点。我使用MAX只是为了获得价格的非空值。可能有更好的方法来做那部分。

SELECT deadline, 
     service_id, 
     MAX(IF(paper_stand = 'A', price, NULL) AS paper_stand_a, 
     MAX(IF(paper_stand = 'B', price, NULL) AS paper_stand_b, 
     edu_level 
FROM price_matrix 
GROUP BY deadline; 
+0

爱你加入方式[1](Y);我想你需要添加Distinct或Group By来过滤出重复的记录。 –

+0

b.paper_stand中的结果总是显示0.00 – user1516790

+0

@ user1516790您是否弄明白了,还是仍然存在问题?其中哪一个是你想要的? – jmilloy

0

我们可以在select上使用Inner Query来获取结果。

我没有SQL查询生成器,但写这会给你一个想法查询。

SELECT deadline, service_id, edu_level, 
     (SELECT price FROM price_matrix tmp 
     WHERE pm.deadline = tmp.deadline 
      AND pm.service_id = tmp.service_id 
      AND tmp.paper_stand = 'A') AS PaperStandA, 
     (SELECT price FROM price_matrix tmp 
     WHERE pm.deadline = tmp.deadline 
      AND pm.service_id = tmp.service_id 
      AND tmp.paper_stand = 'B') AS PaperStandB, 
FROM price_matrix pm 
GROUP BY deadline, service_id, edu_level 
0

尝试

SELECT A.deadline, A.edu_level, A.service_id, A.price as paper_standA, B.price as paper_standB 
FROM (

SELECT * 
FROM price_matrix 
WHERE paper_stand = 'A' 
) AS a, (

SELECT * 
FROM price_matrix 
WHERE paper_stand = 'B' 
) AS b 
WHERE a.service_id = b.service_id 
AND b.deadline = a.deadline