2016-04-21 24 views
1

連接使用嵌套表我的查詢看起來像這樣錯誤而在SQL

SELECT level1_idnt, day_dt, avg(sls_price) as avg_rp 
FROM (SELECT * FROM (SELECT DISTINCT level1_idnt,day_dt,sls_price 
        FROM (SELECT a.level1_idnt,a.day_dt,a.sls_price,b.op 
          FROM (SELECT level1_idnt,day_dt,sls_price 
          FROM md1.loc_sku_dy_act_pos_full_v2 
          WHERE seasn_cd =2 and day_dt >= '2015-03-01 00:00:00' and day_dt <= '2015-09-30 00:00:00' 
           )l0 
          a left join (SELECT level1_idnt, AVG(org_sales_price) as op 
             FROM (SELECT DISTINCT level1_idnt, org_sales_price 
             FROM md1.item_lv1_org_price_m 
             WHERE fr_cntry_cde = '01' AND org_sales_price IS NOT NULL 
             ) l 
             GROUP BY level1_idnt)l_op 
          b 
          ON a.level1_idnt = b.level1_idnt 
          )l1 
      WHERE sls_price <= op 
    )l2 
     WHERE sls_price is not null 
    ) l3 
GROUP BY level1_idnt,day_dt; 

爲了這個,我正在一個錯誤

syntax error at or near "a" 

任何幫助,將不勝感激

回答

1

檢查這;)它看起來像子查詢中的alias錯誤。

SELECT level1_idnt, day_dt, avg(sls_price) as avg_rp 
FROM (SELECT * FROM (SELECT DISTINCT level1_idnt,day_dt,sls_price 
        FROM (SELECT a.level1_idnt,a.day_dt,a.sls_price,b.op 
          FROM (SELECT level1_idnt,day_dt,sls_price 
           FROM md1.loc_sku_dy_act_pos_full_v2 
           WHERE seasn_cd =2 and day_dt >= '2015-03-01 00:00:00' and day_dt <= '2015-09-30 00:00:00' 
           ) 
          a left join (SELECT level1_idnt, AVG(org_sales_price) as op 
             FROM (SELECT DISTINCT level1_idnt, org_sales_price 
              FROM md1.item_lv1_org_price_m 
              WHERE fr_cntry_cde = '01' AND org_sales_price IS NOT NULL 
              ) l 
             GROUP BY level1_idnt) 
        b 
ON a.level1_idnt = b.level1_idnt 
)l1 
WHERE sls_price <= op 
)l2 
WHERE sls_price is not null 
) l3 
GROUP BY level1_idnt,day_dt; 

a之前有一個字符串之前b字符串l_op

1

它看起來像你想給兩個名稱相同的子查詢:

(SELECT level1_idnt,day_dt,sls_price 
FROM md1.loc_sku_dy_act_pos_full_v2 
WHERE seasn_cd =2 and day_dt >= '2015-03-01 00:00:00' 
and day_dt <= '2015-09-30 00:00:00')l0 a 

或調用子查詢「l0」或「a」

,並用「B」同樣的情況:

(SELECT level1_idnt, AVG(org_sales_price) as op 
FROM (SELECT DISTINCT level1_idnt, org_sales_price 
     FROM md1.item_lv1_org_price_m 
     WHERE fr_cntry_cde = '01' AND org_sales_price IS NOT NULL) l 
GROUP BY level1_idnt) l_op b 

或調用子查詢「l_op」或「b」

從我所看到的,我認爲你可以將「A」與「10」和「b」與「l_op」在此行

SELECT a.level1_idnt,a.day_dt,a.sls_price,b.op 

並刪除名字的「a」和「b」,從子查詢