说如果我有一个2列 - ID,金钱的表。 我想做一个查询,以找出多少ID有钱少于100,200,300,...,10000 我应该如何在SQL Server中做到这一点?我需要使用变量吗?在SQL Server中积累计数
0
A
回答
0
有时很简单,以使用循环中的存储过程:
CREATE TABLE #tmp0(
bucket int,
accumulator int,
)
/* for(n = maxvalue; n > 0; n -= 100) */
Declare @n int
select @n = (select 100 + (100 * (max(moneyField)/100)) from tbl)
while @n > 0
begin
insert into #tmp0 (bucket, accumulator)
(select @n, count(*) from tbl where moneyField < @n)
select @n = @n - 100
end
select * from #tmp0 order by bucket
drop table #tmp0
1
假设ID是一个键柱,尝试:
Select Case When money < 100 Then 'LT100'
When money < 200 Then 'From100To199'
When money < 300 Then 'From200To299'
When money < 1000 Then 'From300To999'
Else 'GE1000' End Bucket,
Count(*) Count
From Table
Group By Case When money < 100 Then 'LT100'
When money < 200 Then 'From100To199'
When money < 300 Then 'From200To299'
When money < 1000 Then 'From300To999'
Else 'GE1000' End
编辑: 如果桶的长度或大小是常数,(或可被表示为一个SQL表达式),则可以做通过定义桶作为表达式的输出,如在,例如,以限定每$ 100美元桶的桶中的任何任意数目:
Select Str(Floor(Cast(money/100)), 8, 0) Bucket,
Count(*) Count
From Table
Group By Str(Floor(Cast(money/100)), 8, 0)
,或者有100个美元水桶高达1000 $,然后$ 1000从那里起水桶:
Select Case When Money < 1000
Then Str(Floor(Cast(money/100)), 8, 0)
Else Str(Floor(Cast(money/1000)), 8, 0) End Bucket,
Count(*) Count
From Table
Group By Case When Money < 1000
Then Str(Floor(Cast(money/100)), 8, 0)
Else Str(Floor(Cast(money/1000)), 8, 0) End
获得累积计数,我会使用上面的SQL querys的输出作为另一个SQL子查询: 使用第一个为例:
Select LT100,
LT100 + From100To199 LT200,
LT100 + From100To199 + From200To299 LT300,
LT100 + From100To199 + From200To299 + From300To999 LT1000,
LT100 + From100To199 + From200To299 + From300To999 + GE1000 Total
From (Select Case When money < 100 Then 'LT100'
When money < 200 Then 'From100To199'
When money < 300 Then 'From200To299'
When money < 1000 Then 'From300To999'
Else 'GE1000' End Bucket,
Count(*) Count
From Table
Group By Case When money < 100 Then 'LT100'
When money < 200 Then 'From100To199'
When money < 300 Then 'From200To299'
When money < 1000 Then 'From300To999'
Else 'GE1000' End) Z
0
SELECT
SUM(CASE WHEN MONEY < 100 THEN 1 ELSE 0 END AS '0-100'
,SUM(CASE WHEN MONEY >= 100 AND MONEY < 200 THEN 1 ELSE 0 END AS '100-200'
,SUM(CASE WHEN MONEY >= 200 AND MONEY < 300 THEN 1 ELSE 0 END AS '200-300'
FROM
Table
相关问题
- 1. SQL累积计数
- 2. SQL中的累积计数
- 3. SQL Server 2008的累积运行总计
- 4. 累积SQL计算
- 5. SQL累积%合计
- 6. SQL Server累积求和
- 7. 的SQL Server 2008 - 积累列
- 8. 在SQL SERVER 2008中累积添加
- 9. 累积计算
- 10. SQL累积总误差Server 2012中
- 11. SQL Server中的连续/累积日期
- 12. “变量”,在SQL Server的累积值
- 13. 累积合计
- 14. 在php中计算积累
- 15. 如何计算SQL Server 2008中的累积产品?
- 16. SQL累积值
- 17. 获取累积计数
- 18. 累积频率计数 - MATLAB
- 19. 熊猫累积计数
- 20. 积累多总计
- 21. 计算累积在熊猫
- 22. SQL中的累积和
- 23. Matlab中唯一值的累积计数
- 24. 累积计数,并计数成负日期,并积极
- 25. 在Matlab中计算累积回报
- 26. 在mysql中计算累积式公式
- 27. 累计总数计数 - SQL
- 28. 在SQL查询中积累列
- 29. 计算TSQL中的非累积值?
- 30. F#数组的累积积
谢谢回答。如果范围从0到1000000000?然后我必须输入10,000,000次“当金钱<....”的声明。有没有更有效的方法来做到这一点? 顺便说一句,这个问题是要求计算累计计数。所以这将是0-100计数,0-200计数,0-300等... – Stan 2010-01-17 17:36:46
添加调整处理年问题...并做累计数现在.. – 2010-01-17 19:49:51