2015-07-03 79 views
4

我想写一个查询,将捕获0和50的计数,形成贷款组1,计数为51和100,计数贷款等组2。我试图以50个增量计算每个银行的贷款,并将它们分组到50个。我需要列出所有的贷款编号。贷款分组数50

SELECT DISTINCT 
    DLR_NAME, 
    ACCOUNT, 
    COUNT(*) AS GROUPCOUNT, 
    CASE WHEN COUNT BETWEEN 1 AND 50 Then 'Group 1' 
     WHEN COUNT BETWEEN 51 AND 100 THEN 'Group 2' 

就像这样。目前我是新手。

+0

什么版本的SQL Server? – RedFilter

+0

一组0的输出是什么样的? – RedFilter

回答

3

我不知道我理解你正确,但试试这个:

declare @GroupSize decimal = 50.0 
select BankID, 
    LoanID, 
    floor((_row - 1)/@GroupSize) as [GroupNum] 
from (
    select BankID, 
     LoanID, 
     row_number() over (partition by BankID order by BankID, LoanID) as _row 
    from Loan 
) a 

SQL Fiddle

+0

可能希望为您的“GroupNum”逻辑添加“+ 1”以跳过组0(因此第1-50行为1而不是0)。很酷的解决方案! – APH

+0

如果'@ groupsize'是一个整数,'floor()'是不必要的,'order by'中的'BankId'是不必要的。 –

0

不知道你真正需要的,但也许这样的事情?

select 
    DLR_NAME, 
    ACCOUNT, 
    CASE WHEN GROUPCOUNT BETWEEN 1 AND 50 Then 'Group 1' 
     WHEN GROUPCOUNT BETWEEN 51 AND 100 THEN 'Group 2' 
    END 
from 
(
    select, 
     DLR_NAME, 
     ACCOUNT, 
     COUNT(*) AS GROUPCOUNT 
    from 
     account 
    group by 
     DLR_NAME, 
     ACCOUNT 
) X 

这将计算每个DLR_NAME + ACCOUNT在表帐户中有多少行,然后根据该行分配组名。

0
Select DLR_NAME, ACCOUNT , 'Group ' + Convert(varchar(10), (Convert(int, GROUPCOUNT/50) + 1)) as Group From 
(
SELECT DISTINCT 
    DLR_NAME, 
    ACCOUNT, 
    COUNT(*) AS GROUPCOUNT 
From Account 
Group by DLR_NAME, ACCOUNT 
)T 

说明:

Convert(varchar(10), (Convert(int, GROUPCOUNT/50) + 1)) 

GROUPCOUNT = 57 then 
1). Convert(varchar(10), (Convert(int, 57/50) + 1)) 
2). Convert(varchar(10), (Convert(int, 1.14) + 1)) 
3). Convert(varchar(10), (1 + 1)) 
4). 2 as Varchar 

没有必要的情况下,当管理情况。

+0

你可以添加一些解释吗? –