【问题标题】:Trying to combine two different attributes into one column试图将两个不同的属性组合成一列
【发布时间】:2016-12-04 03:33:43
【问题描述】:

我正在尝试编写一个显示 3 个不同列的查询。活动类别名称、总收入和客户数量。我下面的代码显示了这些列(以及 2 个不同的价格,学生价格和普通价格)。我要做的是编写一个查询,根据客户类型是什么来计算收入 * 适当的客户类型(学生或普通)。我似乎无法编写查询以将 2 种不同的客户类型和适当的价格区分开到“收入”列中。任何帮助将不胜感激!

SELECT ACTIVITY_NAME                                          AS CLASS,
       STUDENT_PRICE,
       REGULAR_PRICE,
       Count(CUSTOMER.CUSTOMER_TYPE)                          AS NUM_CUST,
       Count(CUSTOMER.CUSTOMER_TYPE) * ACTIVITY.STUDENT_PRICE AS REVENUE
FROM   ACTIVITY
       JOIN ACTIVITY_BOOKING
         ON ACTIVITY.ID = ACTIVITY_BOOKING.ACTIVITY_ID
       JOIN CUSTOMER
         ON ACTIVITY_BOOKING.CUSTOMER_ID = CUSTOMER.ID
GROUP  BY ACTIVITY_NAME,
          STUDENT_PRICE,
          REGULAR_PRICE
ORDER  BY ACTIVITY.ACTIVITY_NAME 

【问题讨论】:

  • 欢迎来到 Stack Overflow!看起来你正在寻求家庭作业帮助。虽然我们对此本身没有任何问题,但请注意这些dos and don'ts,并相应地编辑您的问题。

标签: sql oracle


【解决方案1】:

我认为您需要SUM 而不是COUNT,您可以将条件值求和为:

SELECT ACTIVITY_NAME                                          AS CLASS,
       STUDENT_PRICE,
       REGULAR_PRICE,
       Count(CUSTOMER.CUSTOMER_TYPE)                          AS NUM_CUST,
       Sum (case when CUSTOMER.CUSTOMER_TYPE = 'Student' then STUDENT_PRICE when CUSTOMER.CUSTOMER_TYPE = 'Regular' then REGULAR_PRICE else 0 end) AS REVENUE
FROM   ACTIVITY
       JOIN ACTIVITY_BOOKING
         ON ACTIVITY.ID = ACTIVITY_BOOKING.ACTIVITY_ID
       JOIN CUSTOMER
         ON ACTIVITY_BOOKING.CUSTOMER_ID = CUSTOMER.ID
GROUP  BY ACTIVITY_NAME,
          STUDENT_PRICE,
          REGULAR_PRICE
ORDER  BY ACTIVITY.ACTIVITY_NAME 

【讨论】:

  • 嘿,这很完美!谢谢!我只是在学习如何正确编写“case”和“if-then”语句,所以这是一个巨大的帮助!我现在遇到的唯一问题是当我显示 NUM_CUST 列时,即使一行显示 0(没有客户),它也会在收入列中显示常规价格。当 NUM_CUST 显示 0 时,我如何在收入中显示 0?
  • @D.S.我已经编辑了案例陈述,现在它应该显示 0。我认为客户要么是学生,要么是普通人,不可能有 0。干杯
  • 非常感谢,在您发表评论之前我就想通了。但你的更干净;)。你是最棒的,祝你好运。
猜你喜欢
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
相关资源
最近更新 更多