SQL:基于列值的嵌套查询

时间:2012-07-23 19:02:47

标签: mysql

我查询了一个包含以下查询的表

select content_type_code_id
    , price
    , count(price) AS PRICECOUNT 
from dbo.transaction_unrated 
where transaction_date >= '2012/05/01' 
    and transaction_date < '2012/06/01' 
    and content_provider_code_id in (1) 
group by content_type_code_id, price 
ORDER BY price ASC

产生以下结果集

content_type_code_id   price    PRICECOUNT
1                     -1.99     1
1                     -0.99     1
1                      0.99     178
1                      1.99     786

但我想要一个像这样的结果集:

content_type_code_id    price   Debits Credits
1                      0.99     178      1
1                      1.99     786      1

(作为信用的负价格和作为借方的正价格)

2 个答案:

答案 0 :(得分:0)

尝试这个

select content_type_code_id
    , ABS(price)
    , count(IF(price >= 0,1,null)) AS debits,
    , count(IF(price < 0,1,null)) AS credits,
from dbo.transaction_unrated 
where transaction_date >= '2012/05/01' 
    and transaction_date < '2012/06/01' 
    and content_provider_code_id in (1) 
group by content_type_code_id, ABS(price)
ORDER BY price ASC

答案 1 :(得分:0)

试试这个:

SELECT  content_type_code_id
     ,  price * -1
     ,  COUNT(price) AS PRICECOUNT
     ,  (
          SELECT  COUNT (deb.price)
            FROM  dbo.transaction_unrated deb
            WHERE deb.transaction_date >= '2012/05/01'
            AND   deb.transaction_date < '2012/06/01'
            AND   deb.content_provider_code_id IN (1)
            AND   deb.price = ( dbo.transaction_unrated.price * -1 )
        )
  FROM  dbo.transaction_unrated
  WHERE transaction_date >= '2012/05/01'
  AND   transaction_date < '2012/06/01'
  AND   content_provider_code_id IN (1)
  AND   price < 0
  GROUP BY content_type_code_id
         , price
         , 4
  ORDER BY price ASC