2016-12-03 45 views
0

我试图编写一个显示3个不同列的查询。活动类别名称,总收入和客户数量。我的下面的代码显示了那些列(以及两个不同的价格,学生和常规)。我想要做的是编写一个查询,根据客户类型*适当的客户类型(学生或常规)计算收入。我似乎无法编写查询来区分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 
+0

欢迎堆栈溢出!看起来你正在寻求作业帮助。虽然我们本身没有任何问题,但请观察这些[应做和不应该](http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions/338845#338845),并相应地编辑您的问题。 –

回答

0

我想你需要SUMCOUNT,你可以总结条件值:

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 
+0

嘿,这工作完美!谢谢!我只是在了解如何正确写出'case'和'if-then'的陈述,所以这是一个巨大的帮助!只有问题我现在与此同时显示NUM_CUST列,即使一行显示0(无客户),它会显示在收入列中的正常价格。如何在NUM_CUST显示0时在收入中显示0? –

+0

@ D.S。我已经编辑了病例陈述,现在它应该显示0.我认为客户是studen或常规,并且不可能有0. Cheers – Kacper

+0

非常感谢,我在你评论之前就已经计算出来了。但你的更清洁;)。你是最好的,有一个伟大的。 –

相关问题