在pentaho数据集成(子查询)上查询sql错误

时间:2013-12-24 09:18:31

标签: mysql pentaho

这是我的SQL查询

SELECT 
p.Product_Name, d.year4
COUNT (fact_order.sk_product)
FROM 
(SELECT * FROM fact_order limit 0,5000) fo , product p , dim_date d
WHERE fo.sk_product = p.sk_product and fo.sk_order_date = d.date_key and fo.sk_product = ${product_name}
GROUP BY fo.sk_product, d.year4
LIMIT 0,2000 

我希望展示基于产品的年份

3 个答案:

答案 0 :(得分:0)

SELECT p.Product_Name, d.year4, COUNT(fo.sk_product)
  FROM (SELECT * FROM fact_order limit 0, 5000) fo, product p, dim_date d
 WHERE fo.sk_product = p.sk_product
   and fo.sk_order_date = d.date_key
   and fo.sk_product = ${product_name}
 GROUP BY fo.sk_product, d.year4,p.Product_Name LIMIT 0, 2000

答案 1 :(得分:0)

您的查询缺少

SELECT 
p.Product_Name, d.year4,COUNT (fact_order.sk_product)
FROM 
(SELECT * FROM fact_order limit 0,5000) fo , product p , dim_date d
WHERE fo.sk_product = p.sk_product and fo.sk_order_date = d.date_key and fo.sk_product = ${product_name}
GROUP BY fo.sk_product, d.year4
LIMIT 0,2000 

答案 2 :(得分:0)

我认为错误发生在WHERE条款中。你在做fo.sk_product = ${product_name}。 如果我没错,你应该将sk_product(我猜它是一个整数)与另一个进行比较 sk_product,而不是product_name(它是字符串)。

在事实表中,您有sk_product,我会fo.sk_product = p.sk_product。 此外,您SELECT p.Product_Name中有GROUP BY,但它不在fo.sk_product条款中。如果您想获取行中的产品名称,请将p.product_name替换为GROUP BY中的p.Product_Name,或者如果您想获取代理键而不是产品名称,请替换{在p.sk_product子句中SELECT {1}}。{/}

您必须认为要按product_name获取产品,此列必须是唯一的。

查询将是这样的(按sk_product获取,sk_product作为参数):

  SELECT 
        p.sk_product, d.year4, COUNT(fact_order.sk_product)
        FROM 
        (SELECT * FROM fact_order limit 0,5000) fo, product p , dim_date d
        WHERE fo.sk_product = p.sk_product and fo.sk_order_date = d.date_key and fo.sk_product = ${sk_product_parameter}
        GROUP BY p.sk_product, d.year4
        LIMIT 0,2000 

或者像这样(如果product_name对于每个sk_product都是UNIQUE,则通过product_name获取):

SELECT 
p.Product_Name, d.year4
COUNT (fact_order.sk_product)
FROM 
(SELECT * FROM fact_order limit 0,5000) fo , product p , dim_date d
WHERE fo.sk_product = p.sk_product and fo.sk_order_date = d.date_key and p.product_name = ${product_name}
GROUP BY fo.sk_product, d.year4
LIMIT 0,2000