2012-11-16 42 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