【问题标题】:Converting Pivot from Oracle to SQL Server将 Pivot 从 Oracle 转换为 SQL Server
【发布时间】:2018-08-03 18:22:56
【问题描述】:

我需要将一个 select 语句从 Oracle 转换为 SQL Server。但是脚本中有支点,我想不通。

这是选择语句

SELECT          user_id,
                cart_id,
                order_total,
                date_abandonment,
                date_abandonment_first,
                fl_abandoned_cart,
                p1_quantity,
                p1_product_name,
                p1_product_description,
                p1_product_type_description,
                p1_product_duration,
                p1_unit_price,
                p2_quantity,
                p2_product_name,
                p2_product_description,
                p2_product_type_description,
                p2_product_duration,
                p2_unit_price,
                p3_quantity,
                p3_product_name,
                p3_product_description,
                p3_product_type_description,
                p3_product_duration,
                p3_unit_price,
                p4_quantity,
                p4_product_name,
                p4_product_description,
                p4_product_type_description,
                p4_product_duration,
                p4_unit_price,
                p5_quantity,
                p5_product_name,
                p5_product_description,
                p5_product_type_description,
                p5_product_duration,
                p5_unit_price
           FROM Cart PIVOT (MAX (quantity) AS quantity,
                                            MAX (product_name) AS product_name,
                                            MAX (product_description) AS product_description,
                                            MAX (product_type_description) AS product_type_description,
                                            MAX (product_duration) AS product_duration,
                                            MAX (unit_price) AS unit_price
                                      FOR (PRODUCT_NUM)
                                      IN  ( (1) AS p1,
                                          (2) AS p2,
                                          (3) AS p3,
                                          (4) AS p4,
                                          (5) AS p5)))

当我在 SQL Server 中运行它时,它给了我这个错误:

关键字“AS”附近的语法不正确

在枢轴所在的行。

【问题讨论】:

  • 我不会说它会解决所有问题,但 SQL Server 不支持 MAX(Field1) 作为数据透视声明中的内容。你在选择中做别名。

标签: sql sql-server oracle pivot


【解决方案1】:

我会使用条件聚合函数来做pivot。

它可以在同一查询中在 SQL-server 或 Oracle 上工作。

SELECT      
    user_id,
    cart_id,
    order_total,
    date_abandonment,
    date_abandonment_first,
    fl_abandoned_cart,
    MAX(CASE WHEN PRODUCT_NUM = 1 THEN quantity END)                 p1_quantity
    MAX(CASE WHEN PRODUCT_NUM = 1 THEN product_name END)             p1_product_name,
    MAX(CASE WHEN PRODUCT_NUM = 1 THEN product_description END)      p1_product_description,,
    MAX(CASE WHEN PRODUCT_NUM = 1 THEN product_type_description END) p1_product_type_description
    MAX(CASE WHEN PRODUCT_NUM = 1 THEN product_duration END)         p1_product_duration,
    MAX(CASE WHEN PRODUCT_NUM = 1 THEN unit_price END)               p1_unit_price,
    MAX(CASE WHEN PRODUCT_NUM = 2 THEN quantity END)                 p2_quantity,
    MAX(CASE WHEN PRODUCT_NUM = 2 THEN product_name END)             p2_product_name,
    MAX(CASE WHEN PRODUCT_NUM = 2 THEN product_description END)      p2_product_description,
    MAX(CASE WHEN PRODUCT_NUM = 2 THEN product_type_description END) p2_product_type_description,
    MAX(CASE WHEN PRODUCT_NUM = 2 THEN product_duration END)         p2_product_duration,
    MAX(CASE WHEN PRODUCT_NUM = 2 THEN unit_price END)               p2_unit_price,
    MAX(CASE WHEN PRODUCT_NUM = 3 THEN quantity END)                 p3_quantity,
    MAX(CASE WHEN PRODUCT_NUM = 3 THEN product_name END)             p3_product_name,
    MAX(CASE WHEN PRODUCT_NUM = 3 THEN product_description END)      p3_product_description,
    MAX(CASE WHEN PRODUCT_NUM = 3 THEN product_type_description END) p3_product_type_description,
    MAX(CASE WHEN PRODUCT_NUM = 3 THEN product_duration END)         p3_product_duration,
    MAX(CASE WHEN PRODUCT_NUM = 3 THEN unit_price END)               p3_unit_price,
    MAX(CASE WHEN PRODUCT_NUM = 4 THEN quantity END)                 p4_quantity,
    MAX(CASE WHEN PRODUCT_NUM = 4 THEN product_name END)             p4_product_name,
    MAX(CASE WHEN PRODUCT_NUM = 4 THEN product_description END)      p4_product_description,
    MAX(CASE WHEN PRODUCT_NUM = 4 THEN product_type_description END) p4_product_type_description,
    MAX(CASE WHEN PRODUCT_NUM = 4 THEN product_duration END)         p4_product_duration,
    MAX(CASE WHEN PRODUCT_NUM = 4 THEN unit_price END)               p4_unit_price,
    MAX(CASE WHEN PRODUCT_NUM = 5 THEN quantity END)                 p5_quantity,
    MAX(CASE WHEN PRODUCT_NUM = 5 THEN product_name END)             p5_product_name,
    MAX(CASE WHEN PRODUCT_NUM = 5 THEN product_description END)      p5_product_description,
    MAX(CASE WHEN PRODUCT_NUM = 5 THEN product_type_description END) p5_product_type_description,
    MAX(CASE WHEN PRODUCT_NUM = 5 THEN product_duration END)         p5_product_duration,
    MAX(CASE WHEN PRODUCT_NUM = 5 THEN unit_price END)               p5_unit_price
FROM Cart 
GROUP BY 
    user_id,
    cart_id,
    order_total,
    date_abandonment,
    date_abandonment_first,
    fl_abandoned_cart

【讨论】:

    猜你喜欢
    • 2010-11-28
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 2013-05-30
    相关资源
    最近更新 更多