Sql 仅选择上面的值;X";

Sql 仅选择上面的值;X";,sql,oracle,Sql,Oracle,我有一个数据透视表,显示了一年来的购买情况 _____________________________________________ | CUSTOMER ID | 1 | 2 | 3 | ... |___________________________________________| |12345 | 200 | - | 100 | ... |___________________________________

我有一个数据透视表,显示了一年来的购买情况

_____________________________________________
| CUSTOMER ID |    1    |    2    |    3    | ...
|___________________________________________|
|12345        |   200   |    -    |   100   | ...
|___________________________________________|
|45678        |   500   |   500   |   500   | ...
|___________________________________________|
|45678        |    10   |   500   |   50    | ...
|___________________________________________|
   ....           ....       ...      ... 
现在我需要过滤这个表,以便只显示大于150的值,同时保留所有其他值

Desired Result
_____________________________________________
| CUSTOMER ID |    1    |    2    |    3    | ...
|___________________________________________|
|12345        |   200   |    -    |    -    | ...
|___________________________________________|
|45678        |   500   |   500   |   500   | ...
|___________________________________________|
|45678        |     -   |   500   |    -    | ...
|___________________________________________|
   ....           ....       ...      ... 
我在LiveSQL oracle上做这件事,我花了好几个小时来讨论这个问题,我似乎不能放一个“WHERE”子句,因为它要么是“OR”要么是“and”,其中包括整个条目,要么不是。“拥有”似乎不起作用。我在我能记得的任何地方都试过了,但是在(1,2,3,4,5,6,7,8,9,10,11,12)中,它告诉我它缺少一个右括号(ORA-00907)

我的代码可以达到我的目的:

SELECT * FROM
            (SELECT CUST_ID, EXTRACT(YEAR FROM TIME_ID) AS "YEAR", EXTRACT(MONTH FROM TIME_ID) AS "MONTH", AMOUNT_SOLD AS SPENT
            FROM SH.SALES
            )
    PIVOT(SUM(SPENT) FOR MONTH
                IN (1,2,3,4,5,6,7,8,9,10,11,12)
                )
        ORDER BY CUST_ID
有人知道我如何解决这个问题吗?

改变

 SELECT CUST_ID, EXTRACT(YEAR FROM TIME_ID) AS "YEAR", EXTRACT(MONTH FROM TIME_ID) AS "MONTH", AMOUNT_SOLD AS SPENT
 FROM SH.SALES

i、 e.将客户当月的所有购买记录汇总,如果少于(或等于)150,则将其从结果集中排除。这意味着您的数据透视现在只对单个值进行数据透视/求和,而不是对N个值进行数据透视/求和,但总体效果相同(即,在准备数据透视时,求和会提前完成,而不是在数据透视期间求和)

<

 SELECT CUST_ID, EXTRACT(YEAR FROM TIME_ID) AS "YEAR", EXTRACT(MONTH FROM TIME_ID) AS "MONTH", AMOUNT_SOLD AS SPENT
 FROM SH.SALES

i、 e.将客户当月的所有购买记录汇总,如果少于(或等于)150,则将其从结果集中排除。这意味着您的数据透视现在只对单个值进行数据透视/求和,而不是对N个值进行数据透视/求和,但总体效果是相同的(即,在准备数据透视时,求和会提前完成,而不是在数据透视期间求和)

只需使用

CUSTOMER_ID, 
case when "1">150 then "1" end as "1",
case when "2">150 then "2" end as "2",
case when "3">150 then "3" end as "3",
只需使用

CUSTOMER_ID, 
case when "1">150 then "1" end as "1",
case when "2">150 then "2" end as "2",
case when "3">150 then "3" end as "3",

您是否尝试过此方法,并期望得到什么结果

select * from (
SELECT * FROM
            (SELECT CUST_ID, EXTRACT(YEAR FROM TIME_ID) AS "YEAR", EXTRACT(MONTH FROM TIME_ID) AS "MONTH", AMOUNT_SOLD AS SPENT
            FROM SH.SALES
            )
    PIVOT(SUM(SPENT) FOR MONTH
                IN (1,2,3,4,5,6,7,8,9,10,11,12)
                )
        ORDER BY CUST_ID) where "1" > 150 and "2" > 150 and "3" > 150 and "4" > 150 and "5" > 150 and "6" > 150 and "7" >150 and "8" > 150 and "9" > 150 and "10" > 150
        and "11" > 150 and "12" > 150;

你试过这个吗?你期望得到什么结果

select * from (
SELECT * FROM
            (SELECT CUST_ID, EXTRACT(YEAR FROM TIME_ID) AS "YEAR", EXTRACT(MONTH FROM TIME_ID) AS "MONTH", AMOUNT_SOLD AS SPENT
            FROM SH.SALES
            )
    PIVOT(SUM(SPENT) FOR MONTH
                IN (1,2,3,4,5,6,7,8,9,10,11,12)
                )
        ORDER BY CUST_ID) where "1" > 150 and "2" > 150 and "3" > 150 and "4" > 150 and "5" > 150 and "6" > 150 and "7" >150 and "8" > 150 and "9" > 150 and "10" > 150
        and "11" > 150 and "12" > 150;

您每年都在提取数据,但只按月份进行聚合,这是出于设计还是仅处理特定的年份?您能否共享样本数据集,最好是在一个提琴内共享?@BarbarosÖzhan该数据集在HS模式下公开。稍后我会将其应用于其他数据,但现在我只是解决问题。@Isildur我只是认为在我这里绘制的ascii表中显示它并不重要,但是是的。我希望每年/每个客户都有一个条目,你每年都在拉,但只按月聚合,这是设计的还是你只是在处理一个特定的年份?你能分享样本数据集吗,最好是在一个提琴里?@BarbarosÖzhan该数据集在HS模式下公开。稍后我会将其应用于其他数据,但现在我只是解决问题。@Isildur我只是认为在我这里绘制的ascii表中显示它并不重要,但是是的。我希望每年/每个客户有一个条目。这也行!谢谢唯一的小细节是,它将显示没有任何超过150的值的客户ID。这同样有效!谢谢唯一的一个小细节是,它将显示没有任何值超过150的客户ID。谢谢!我没有尝试过这个,但我认为它与@Sayan-Malakshinov的解决方案非常相似,我认为它更具可读性。谢谢!我没有尝试过这个,但我认为它与@Sayan-Malakshinov的解决方案非常相似,我认为它更具可读性。