2017-08-02 60 views
2

输入:乘记录我的成熟

我有4个表中的列:

KONTO CUSTOMER_NUMBER COLLATERAL_TYPE MATURITY 

Konto的独特价值,到期日价值,我需要繁殖。

例子:

KONTO CUSTOMER_NUMBER COLLATERAL_TYPE MATURITY 
-------------------------------------------------- 
1   000234   H    4 
2   000234   G    3 
3   212567   H    5 

我需要创建表,每KONTO乘以我的最大的成熟度和每个客户的抵押品类型。也许它更容易说,每个抵押品应该有记录FER每年到期

输出:

KONTO CUSTOMER_NUMBER COLLATERAL_TYPE MATURITY 
------------------------------------------------- 
1   000234   H    1 
1   000234   H    2 
1   000234   H    3 
1   000234   H    4 
2   000234   G    1 
2   000234   G    2 
2   000234   G    3 
3   212567   H    1 
3   212567   H    2 
3   212567   H    3 
3   212567   H    4 
3   212567   H    5 

我从其他公司的同事们成功地做到这一点,但我不知道怎么办。

我在MS Access中使用MS Access/SQL。

谢谢你,我的英文不好

回答

0

抱歉,这是在MS Access,它不具有热膨胀系数和窗函数真的很痛苦。一种方法是:

select KONTO, CUSTOMER_NUMBER, COLLATERAL_TYPE, 1 as MATURITY 
from t 
where MATURITY >= 1 
union all 
select KONTO, CUSTOMER_NUMBER, COLLATERAL_TYPE, 2 as MATURITY 
from t 
where MATURITY >= 2 
union all 
select KONTO, CUSTOMER_NUMBER, COLLATERAL_TYPE, 3 as MATURITY 
from t 
where MATURITY >= 3 
union all 
select KONTO, CUSTOMER_NUMBER, COLLATERAL_TYPE, 4 as MATURITY 
from t 
where MATURITY >= 4 
union all 
select KONTO, CUSTOMER_NUMBER, COLLATERAL_TYPE, 5 as MATURITY 
from t 
where MATURITY >= 5; 

当然,您将不得不重复这种模式,直到您的最大成熟度。

+0

好了,谢谢你。我的抵押品没有超过30年的成熟期,但我有10种类型的抵押品和30000多个客户。 “您没有CTE或窗口功能”是什么意思? – Dropbox13

+0

@ Dropbox13。 。 。使用这种方法,你将需要30个子查询。 CTE和窗口函数是MS Access中不支持的SQL中的标准功能。 –

+0

我还有一个问题,我应该开新的问题或问这里?它与这个问题相关。 – Dropbox13

1

您可以使用笛卡尔(乘)查询:

SELECT DISTINCT 
    KontoTable.Konto, 
    KontoTable.Customer_Number, 
    KontoTable.Collateral_Type, 
    10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10) AS Maturity 
FROM 
    MSysObjects AS Uno, 
    MSysObjects AS Deca, 
    KontoTable 
WHERE 
    ((10*Abs([Deca].[id] Mod 10)+Abs([Uno].[id] Mod 10)) 
    Between 1 And KontoTable.Maturity); 
+0

这对我来说确实很好! :)我会明天在我的原始数据库上尝试它。我希望它会起作用。我会让你知道的!谢谢!!!! – Dropbox13

+0

这就是'MSysObjects'的一些创造性用法!据我所知,如果'MSysObjects'缺少大部分的ID或者包含很少的ID并且需要许多不同的成熟度,那么猜测这不起作用,或者我错过了什么? –

+1

@ErikvonAsmuth:_MSysObjects_永远不会丢失,但会保存各种ID。但是,_Distinct_,_Abs_和_Mod 10_的使用可确保从0到9的ID始终存在。如果你愿意,你可以用一个简单的“Numbers”表代替0到任何值。 – Gustav