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