【问题标题】:Power BI Microsoft SQL: Incorrect syntax near ';'. Incorrect syntax near ')'Power BI Microsoft SQL:“;”附近的语法不正确。 ')' 附近的语法不正确
【发布时间】:2021-07-13 19:31:23
【问题描述】:

以下在 DataGrip 中运行良好。但是,在 Power BI 中,我收到此错误,不知道为什么:

Microsoft SQL:“;”附近的语法不正确。 ')' 附近的语法不正确。

这给了我另一个 CTE 错误,我必须在开头添加分号,但我似乎无法弄清楚。语法看起来不错。

  ;WITH pizzaorder AS ( 
        SELECT DISTINCT [order].id 
        FROM [order]
        LEFT JOIN order_line 
        ON order_line.order_id = [order].id 
        WHERE pizza_product_id IS NOT NULL
    ),
    
    otherproductorder AS (
        SELECT DISTINCT [order].id 
        FROM [order]
        LEFT JOIN order_line ON order_line.order_id = [order].id 
        WHERE other_product_id IS NOT NULL
    ),
    
    mostsold AS (
        SELECT TOP 10 product_name,
        SUM(quantity) AS quantity 
        FROM pizzaorder
        INNER JOIN otherproductorder ON otherproductorder.id = pizzaorder.id 
        LEFT JOIN order_line ON order_line.order_id = pizzaorder.id 
        INNER JOIN product ON product.id = order_line.other_product_id 
        GROUP BY product_name
    )
    
    SELECT TOP 10 *
    FROM mostsold 
    ORDER BY quantity DESC

【问题讨论】:

  • 我确信有一种更简单的方法来编写查询。您应该解释您希望查询执行的操作。样本数据和期望的结果也有帮助。
  • 你真的应该重新开始。 DISTINCT 的多次使用有一种难闻的气味,使用没有 ORDER BY 子句的 TOP 10 是一个逻辑缺陷。您的架构看起来非常可疑,非常非常具体的列(other_product_id 和 Pizza_product_id)表明存在规范化问题。最后,最终查询从 mostsold 中选择前 10 行 - 但 cte 已经限制为 10 行。即使您的查询在不同的工具中“有效”,也不太可能为您提供正确或一致的结果。

标签: sql sql-server powerbi


【解决方案1】:

在许多情况下,Power BI 会将您提供的查询与其他查询组合在一起,方法是将其包装在子查询中。这不适用于 CTE。

因此,您可以使用该逻辑创建视图,或将 CTE 转换为 FROM 子句中的子查询。

但通常您不应该在将数据公开给 Power BI 之前进行此类查询工作。在 Power BI 中,您通常将每个表单独引入 Power BI 数据集中。

【讨论】:

    【解决方案2】:

    我设法按照 SMor 的建议重新开始解决了这个问题。

    它仍然不完美,数据库有一些缺陷,但这是适合我情况的解决方案。

    SELECT TOP 10 product_name, SUM(quantity) AS quantity 
    FROM (SELECT DISTINCT [order].id 
        FROM [order] 
        LEFT JOIN order_line ON order_line.order_id = [order].id 
         WHERE pizza_product_id IS NOT NULL) as pizzaorder 
    LEFT JOIN order_line ON order_line.order_id = pizzaorder.id 
    INNER JOIN product ON product.id = order_line.other_product_id 
    GROUP BY product_name 
    ORDER BY quantity DESC 
    

    【讨论】:

      猜你喜欢
      • 2022-11-23
      • 2017-02-07
      • 2015-12-12
      • 2013-12-16
      • 2018-06-26
      • 1970-01-01
      • 2018-08-14
      • 2011-03-11
      • 2014-02-16
      相关资源
      最近更新 更多