2017-08-02 7 views
2

入力録音:乗算私の成熟度

を私はテーブル内の4列があります。

KONTO CUSTOMER_NUMBER COLLATERAL_TYPE MATURITY 

Kontoは、成熟度は、私が乗算する必要がある値であり、一意の値です。

例:私はすべてのKONTOでテーブルを作成する必要が

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

は、顧客ごとに私の最大の成熟度と担保の種類を掛けました。言うのは多分その簡単に、各担保は、成熟度の毎年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を使用しています。

これはCTEのか、ウィンドウ関数を持っていないのMS Access、本当に痛いですありがとうと私の悪い英語のため申し訳ありません

答えて

0

。 1つの方法は次のとおりです。

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

を[OK]を、ありがとうございました。私のcollat​​eralsは30年以上の成熟はありませんが、私は10種類の担保と30000以上の顧客を持っています。 「CTEやウィンドウ関数がない」とはどういう意味ですか? – Dropbox13

+0

@ Dropbox13。 。 。この方法を使用すると、30のサブクエリが必要になります。 CTEとウィンドウ関数は、MS AccessがサポートしていないSQLの標準機能です。 –

+0

もう1つ問題があります。私は新しい質問を開くか、ここで質問しますか?それはこの質問と結びついています。 – 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が常に存在することが保証されます。必要に応じて、0から何かまでの値を保持する単純な "Numbers"テーブルに置き換えることができます。 – Gustav