语法错误案例陈述

时间:2015-11-10 03:12:44

标签: sql

我正在尝试编写一个sql语句,但我收到语法错误。我知道它与我的选择和案例陈述有关,但无法弄清楚。因为错误不是描述性的。我正在使用redshift

select school_district_teacher_ind,customer_status,initial_pay_type,(select(
             CASE 
                  WHEN total_line_price = 0  
                     THEN 'free' 
                  ELSE 'paid'
             END
             ) 
      from storiacloud.schl_storia_revenue_fact_a)as a,count(distinct convert(varchar(100),[Otc_Order_Number])+'_'+ convert(varchar(100),[Otc_Order_Line_Number]))
from storiacloud.schl_storia_revenue_fact_a  as fact
inner join  
storiacloud.schl_storia_school_status as status
on fact.school_ucn = status.ucn
where date = '11/2/2015'
group by school_district_teacher_ind,customer_status,initial_pay_type,a  

以下是错误

ERROR: Invalid Query: 
  Detail: 
  -----------------------------------------------
  error:  Invalid Query: 
  code:      8001
  context:   single-row subquery returns more than one row
  query:     5132289
  location:  25.cpp:69
  process:   padbmaster [pid=29183]
  -----------------------------------------------


Execution time: 0.16s
1 statement failed.

我期望的结果是enter image description here

注意上面的选择陈述中的第一列客户类型是school_district_teacher_ind

2 个答案:

答案 0 :(得分:0)

我认为你只想要条件聚合。查询是这样的:

select school_district_teacher_ind, customer_status, initial_pay_type,
       sum(case when total_line_price = 0 then 1 else 0 end) as free,
       sum(case when total_line_price = 0 then 0 else 1 end) as paid
from storiacloud.schl_storia_revenue_fact_a fact inner join  
     storiacloud.schl_storia_school_status status
     on fact.school_ucn = status.ucn
where date = '2015-11-02'
group by school_district_teacher_ind,customer_status, initial_pay_type; 

答案 1 :(得分:0)

您的案例是一个子查询,它从与您的主查询相同的表中进行选择。试试这个;

SELECT  school_district_teacher_ind ,
        customer_status ,
        initial_pay_type ,
        CASE WHEN total_line_price = 0 THEN 'free'
             ELSE 'paid'
        END AS a ,
        COUNT(DISTINCT CONVERT(VARCHAR(100), [Otc_Order_Number]) + '_'
              + CONVERT(VARCHAR(100), [Otc_Order_Line_Number]))
FROM    storiacloud.schl_storia_revenue_fact_a AS fact
        INNER JOIN storiacloud.schl_storia_school_status AS status ON fact.school_ucn = status.ucn
WHERE   date = '11/2/2015'
GROUP BY school_district_teacher_ind ,
        customer_status ,
        initial_pay_type ,
        CASE WHEN total_line_price = 0 THEN 'free'
             ELSE 'paid'
        END