我有一个类似下面示例的付款表格,我需要一个查询,告诉我支付了多少ID(AMOUNT> 0)1次,2次,3次或更多次。示例:
+----+--------+
| ID | AMOUNT |
+----+--------+
| 1 | 50 |
| 1 | 0 |
| 2 | 10 |
| 2 | 20 |
| 2 | 15 |
| 2 | 10 |
| 3 | 80 |
+----+--------+
我期待结果:
+-----------+------------+-------------+
| 1 payment | 2 payments | 3+ payments |
+-----------+------------+-------------+
| 2 | 0 | 1 |
+-----------+------------+-------------+
ID 1:付1次(50)。另一笔付款是0,所以我没算数。所以,1人付了1次。
ID 2:支付3次(10,20,15)。所以,1人支付了3次或更多次。
ID 3:付1次(80)。所以,2人付了1次。
我现在正在手动使用excel,但我非常确定有更实用的解决方案。有什么想法吗?
答案 0 :(得分:4)
一个小的子查询就可以解决这个问题
Declare @YOurTable table (ID int, AMOUNT int)
Insert into @YourTable values
( 1 , 50 ),
( 1 , 0) ,
( 2 , 10) ,
( 2 , 20) ,
( 2 , 15) ,
( 2 , 10) ,
( 3 , 80)
Select [1_Payment] = sum(case when Cnt=1 then 1 else 0 end)
,[2_Payment] = sum(case when Cnt=2 then 1 else 0 end)
,[3_Payment] = sum(case when Cnt>2 then 1 else 0 end)
From (
Select id
,Cnt=count(*)
From @YourTable
Where Amount<>0
Group By ID
) A
返回
1_Payment 2_Payment 3_Payment
2 0 1
答案 1 :(得分:3)
要获得您想要的输出,请尝试使用表格来形成数据,然后使用SELECT:
with c as (
select count(*) count from mytable where amount > 0 group by id)
select
sum(case count when 1 then 1 else 0 end) "1 Payment"
, sum(case count when 2 then 1 else 0 end) "2 Payments"
, sum(case when count > 2 then 1 else 0 end) "3 Payments"
from c
您可以使用Here is an example查看查询的工作方式。