2016-04-21 25 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”,从子查询