将Pivot从Oracle转换为SQL Server

时间:2018-08-03 18:22:57

标签: sql sql-server oracle pivot

我需要将select语句从Oracle转换为SQL Server。但是脚本中有关键点,我无法弄清楚。

这是选择语句

(\S+)(\w)\1{2,}(\S+)

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

  

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

在枢轴所在的行。

1 个答案:

答案 0 :(得分:1)

我将使用条件聚合函数进行数据透视。

它可以在同一查询中在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