Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql pentaho数据集成(子查询)上的查询sql错误_Mysql_Pentaho - Fatal编程技术网

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

Mysql pentaho数据集成(子查询)上的查询sql错误,mysql,pentaho,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}

这是我的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 
我希望展示基于产品的年数

试试看

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

您的查询缺少

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 

我认为错误在子句
WHERE
中。您正在执行
fo.sk_product=${product_name}
。 如果我没有错,您应该将
sk_product
(我猜它是一个整数)与另一个进行比较
sk_product
,而不是带有
product_name
(它是一个字符串)

在事实表中,您有
sk_产品
,我会做
fo.sk_产品=p.sk_产品
。 此外,在您的
选择中,您有
p.Product\u Name
,但它不在
GROUP BY
子句中。如果要获取行中的产品名称,请在
GROUP BY
中将
fo.sk_product
替换为
p.product_name
,或者如果要获取代理键而不是产品名称,请在
SELECT
子句中将
p.sk_product
替换为
p.sk_product

您必须认为,要通过
product\u name
获取产品,此列必须是唯一的

查询如下所示(通过
sk_product
sk_product
作为参数获取):

或者像这样(如果每个sk_产品的产品名称都是唯一的,则按产品名称获取):

  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 
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