这是一个网购系统。现在需要展现一个用户的信息。其中,需要展现用户的订单中,待付款、待确认的订单的数量。
用户表没有记录待付款、待确认的数量,订单表中有记录订单ID、用户ID、状态等字段。
问题:如何只通过一条查询语句,把用户的信息(包含代付款订单数、待付款订单数)查询出来?
SELECT STATUS, COUNT(*)
FROM tb_order
WHERE userid = '02000001'
GROUP BY STATUS

解决方案 »

  1.   

    select  sum(decode(STATUS,'待付款',1,0))  待付款,
    sum(decode(STATUS,'待确认',1,0))  待确认 
    from tb_order
    WHERE userid = '02000001'
      

  2.   

    CREATE TABLE TB_ORDER (ORDER_ID NUMBER,CUSTOMER_ID NUMBER(5),STATUS VARCHAR2(30)) ;
    INSERT INTO TB_ORDER VALUES(1,10001,'待付款') ;
    INSERT INTO TB_ORDER VALUES(2,10001,'待确认') ;
    INSERT INTO TB_ORDER VALUES(3,10001,'已付款') ;
    INSERT INTO TB_ORDER VALUES(4,10002,'代付款') ;
    INSERT INTO TB_ORDER VALUES(5,10002,'待付款') ;
    INSERT INTO TB_ORDER VALUES(6,10003,'已付款') ;
    SELECT CUSTOMER_ID,STATUS,COUNT(ORDER_ID)
    FROM TB_ORDER
    GROUP BY CUSTOMER_ID,STATUS
    ;
      

  3.   

    误解了楼主的意思,重新看了下标题才知道的是行转列问题。
    附语句:
    SELECT * FROM(
        SELECT CUSTOMER_ID,STATUS,COUNT(ORDER_ID) cnt
        FROM TB_ORDER
        GROUP BY CUSTOMER_ID,STATUS
        )
    PIVOT(MAX(CNT) FOR STATUS IN('待付款','待确认','已付款'))
    ORDER BY CUSTOMER_ID
    ;