2017-06-19 196 views
-1

我的下一個SQL查詢:MySQL的SELECT查詢與另一SELECT

SELECT CONCAT(v.p_sery, v.p_id) AS sery, 
    (SELECT COUNT(1) FROM v where p_delivery_result = 1) AS delivery_count, 
    (SELECT COUNT(1) FROM v where p_delivery_result = 2) AS ND1, 
    (SELECT COUNT(1) FROM v where p_delivery_result = 3) AS ND2, 
    (SELECT COUNT(1) FROM v where p_delivery_result = 4) AS ND3, 
    (SELECT COUNT(1) FROM v where p_delivery_result = 5) AS ND4, 
    (SELECT COUNT(1) FROM v where p_delivery_result = 6) AS ND5, 
    (SELECT COUNT(1) FROM v where p_delivery_result = 7) AS ND6, 
    (SELECT COUNT(1) FROM v where p_delivery_result = 8) AS ND7 
FROM (
    SELECT p_sery, p_id, d.p_delivery_result 
    FROM registries AS a, registry_regulations r, delivery d 
    WHERE a.p_id = r.registry_id AND d.p_id = r.regulation_id AND (SELECT 
    STR_TO_DATE(a.p_date_created, '%Y-%m-%d') BETWEEN '2017-04-01' AND '2017-06-01') 
) as v;  

但這不工作。
錯誤:Table v doesn't exist 我做錯了什麼?

我有這個表:
enter image description here

而且我希望得到的地位一表交付計數

+1

請包括示例數據,並告訴我們你在這裏要做什麼。 –

+0

您是否也可以包含一些預期結果的樣本數據? –

回答

0

無法訪問從相關子查詢的上下文中派生表。試試這個查詢,而不是:

SELECT CONCAT(v.p_sery, v.p_id) AS sery, 
     COUNT(CASE WHEN p_delivery_result = 1 THEN 1 END) AS delivery_count, 
     COUNT(CASE WHEN p_delivery_result = 2 THEN 1 END) AS ND1, 
     COUNT(CASE WHEN p_delivery_result = 3 THEN 1 END) AS ND2, 
     COUNT(CASE WHEN p_delivery_result = 4 THEN 1 END) AS ND3, 
     COUNT(CASE WHEN p_delivery_result = 5 THEN 1 END) AS ND4, 
     COUNT(CASE WHEN p_delivery_result = 6 THEN 1 END) AS ND5, 
     COUNT(CASE WHEN p_delivery_result = 7 THEN 1 END) AS ND6, 
     COUNT(CASE WHEN p_delivery_result = 8 THEN 1 END) AS ND7 
FROM (
    SELECT p_sery, p_id, d.p_delivery_result 
    FROM registries AS a 
    JOIN registry_regulations r ON a.p_id = r.registry_id 
    JOIN delivery d d.p_id = r.regulation_id 
    WHERE STR_TO_DATE(a.p_date_created, '%Y-%m-%d') 
      BETWEEN '2017-04-01' AND '2017-06-01') as v; 

注:始終採用現代,明確JOIN語法,而不是老式的,語法。

+0

謝謝你,你幫了我! –

0

v之前只是刪除作爲

FROM (
    SELECT p_sery, p_id, d.p_delivery_result 
    FROM registries AS a, registry_regulations r, delivery d 
    WHERE a.p_id = r.registry_id AND d.p_id = r.regulation_id AND (SELECT 
    STR_TO_DATE(a.p_date_created, '%Y-%m-%d') BETWEEN '2017-04-01' AND '2017-06-01') 
    ) v 
+0

如果我刪除,因爲沒有改變我有同樣的錯誤。 '表v不存在' –

+0

你正在使用哪個db? – Manihtraa

+0

@Giorgos Betsos你的查詢是工作,但在結果一行,我需要的p_date_created日期 –