2013-07-09 31 views
0

您好我有表與列MySQL查詢選擇行沒有任何關係

id desc rate rates_id 

1 NYC 0.1 0001 
2 NYC 0.25 0003 
3 KYC 0.12 0001 
4 KYC 0.15 0003 

我需要用這種方式

desc rate where rates_id = 0001 rate where rates_id=0003 
NYC 0.1      0.25 
KYC 0.12      0.15 

我wroe此查詢,但不工作

顯示行
SELECT desc, 
     rate, 
     (SELECT rate 
     FROM tablea p 
     WHERE rates_id LIKE '0003' 
       AND p.desc = t.desc) AS rate2 
FROM tablea t 
WHERE rates_id LIKE '0001'; 

任何suggesion ???

+0

XLAnt感謝您的快速回復,但您的查詢給我rate1列總空和很少率2值,即使有值存在兩個rates_id – user1820110

+1

看看小提琴,提供的樣本數據將返回您所描述的預期輸出。在你的問題中有沒有你遺漏的一些信息? –

+0

謝謝x.l.螞蟻它工作我的錯誤:) – user1820110

回答

5

嘗試:

SELECT `desc`, 
    MAX(CASE WHEN rates_id = '0001' THEN rate ELSE NULL END) AS `rate where rates_id = 0001`, 
    MAX(CASE WHEN rates_id = '0003' THEN rate ELSE NULL END) AS `rate where rates_id = 0003` 
FROM table a 
GROUP BY `desc` 

如果你想那裏的至少一個值,只顯示行,您可以添加以下到您的查詢:

HAVING MAX(CASE WHEN rates_id = '0001' THEN rate ELSE NULL END) IS NOT NULL 
    OR MAX(CASE WHEN rates_id = '0003' THEN rate ELSE NULL END) IS NOT NULL 

或直接在相關rates_id過濾:

SELECT `desc`, 
    MAX(CASE WHEN rates_id = '0001' THEN rate ELSE NULL END) AS `rate where rates_id = 0001`, 
    MAX(CASE WHEN rates_id = '0003' THEN rate ELSE NULL END) AS `rate where rates_id = 0003` 
FROM table a 
WHERE rates_id IN ('0001', '0003') 
GROUP BY `desc` 
+0

@fancyPants感謝小提琴:) –

+0

有任何選項隱藏空valuerows ??? – user1820110

+0

是的,有。看到我編輯的答案。希望這有助於 –

1

您的問題是你的主查詢過濾掉的子查詢的結果。

您可以選擇這兩個速率子查詢。

SELECT distinct `desc`, 
    (SELECT rate 
    FROM tablea p 
    WHERE rates_id LIKE '0001' 
      AND p.`desc` = t.`desc`) AS rate1, 
    (SELECT rate 
    FROM tablea p 
    WHERE rates_id LIKE '0003' 
      AND p.`desc` = t.`desc`) AS rate2 
FROM tablea t; 

繼承人的sqlfiddle

,或者你使用joins到subeselect率。

SELECT DISTINCT t.`desc`, rate1.rate, rate2.rate 
FROM tablea t 
LEFT JOIN tablea rate1 ON t.`desc` = rate1.`desc` AND rate1.rates_id = '0001' 
LEFT JOIN tablea rate2 ON t.`desc` = rate2.`desc` AND rate2.rates_id = '0003' 

sqlfiddle的加入

我會建議你使用joins,但您可能需要使用EXPLAIN兩個查詢,看看在你的環境中的成本更低。

+0

你必須'DISTINCT',以避免同一行顯示不止一次。 –

+0

@ X.L.Ant是的,你是對的,我會將它(目前正在建設的SQL小提琴) –