2016-09-07 8 views
2

毎日4〜5回の間に9つのオフィスロケーションでチケットの出現を追跡するテーブルがデータベースにあるとします。これらの各期間では、1つのチケット(トランザクションモデルを使用することができると思われます)に表示されたり、多くの人に表示されることがあります(15人で見たことがあります。複合キーに基づいてキー/フィールドを増分するためのSQL /ロジックにアクセス

このテーブルからデータを取得するために、Access 2013を使用してクエリが作成されました。これはアーカイブ(現在の日付テーブルレコードは24時間後にパージされます)と一般的な分析のために実行されます。次のように

現在のクエリロジックは次のとおりです。

SELECT Format([T1]![APP_DTE],"Short Date") AS APPEAR_DTE, 
T1.OFFICE, OFFCDES.OFFICE_NAME, OFFCDES.LOC_CDE, OFFCDES.LOC_NAME, 
T1.APP_TIME_PER, T1.ROOM_NUM, T1.INCL_CDE, T1.ID_NUMB, 
T1.ADJ_APPEAR_NUM, T2.APPEAR_CDE, 
IIf([T1]![APPEAR_LOGIN_TIME] Is Null,"",[T1]![APPEAR_LOGIN_TIME]) AS LOGIN_TIME1, 
IIf([T1]![OFFICE_LOGIN] Is Null,"",[T1]![OFFICE_LOGIN]) AS OFFICE_LOGIN, 
IIf([T1]![DECISION_TIME] Is Null,"",[T1]![DECISION_TIME]) AS DECISION_TIME, 
[T1]![ID_NUMB] & "-" & CStr([T2]![OFFICE_REP_ID]) & "-" & CStr([T1]![APP_DTE]) AS CASEKEY, 
Weekday([APP_DTE]) AS NUM_DAY, 
[T1]![OFFICE] & "-" & Weekday([T1]![APP_DTE]) & "-" & [T1]![APP_TIME_PER] AS OFFICE_TP_KEY, "" AS RecordKey 
FROM (T1 INNER JOIN OFFCDES ON T1.OFFICE = OFFCDES.OFFICE) 
INNER JOIN T2 ON T1.APPEAR_NUM = T2.APPEAR_NUM 
WHERE (((Format([T1]![APP_DTE],"Short Date"))=Format(Date(),"Short Date"))); 

私は上記のコードを読みやすくするためにクリーンアップする必要があることを認識し、そしてそれはおそらくそれができるほど効率的ではないということ。私が信用できない部分は、同僚から同僚を引き継いで、頭を包み始めたばかりです。

クエリの結果には大量の情報が含まれていますが、そのうちのいくつか(ほとんど)は私が達成しようとしているものとは関係ありません。一度消えた情報は消えてしまったため、この情報をすべて取得することが重要です。

を私は何をしようとしている:私は、特定のID_NUMBが特定のオフィスで発生した回数を教えてしまうのキー/連番の列を組み込むしようとしている

ことが述べられ付き/引き出された日付の期間。私は周りを見回したと多くの素晴らしいナンバリングソリューションを見つけ、ほとんどは私が探していますされていない非常に何をしているが

ID_NUMB | APPEAR_NUM | OFFICE | TP | DATE | SEQ 
1  | 1XZ2  | 01  | 01 | 9/7/2016 | 1 
1  | 1XZ3  | 01  | 01 | 9/7/2016 | 2 
2  | 3MN1  | 03  | 01 | 9/7/2016 | 1 
3  | J915  | 02  | 01 | 9/7/2016 | 1 
1  | 1TY1  | 01  | 01 | 9/7/2016 | 1 
3  | P91D  | 05  | 01 | 9/7/2016 | 1 
2  | U11E  | 11  | 05 | 9/7/2016 | 1 

:私も、むしろ、合計のためにここSEQ列の線に沿って何かを探していませんよ数え方が細かいために達成するために。

私はテンポラリテーブルにデータを書き込むことを考えましたが、私が見つけた情報のいくつかを使用しても、何の解決策も導かれませんでした。同様に、 私はこの情報を取得し、MS Answersサイトで見つかったthe solutionという適合の種類の連続番号を追加できる別のクエリを作成しようとしました。私は間違ったアプローチのように見えたので、それを別に置いた。

私は一時テーブルにクエリを書き込んだ後、一連の番号付けを処理するVBAを持っていましたが、そのアプローチもあまり進まなかった。

私が概説したように列に連続番号を生成する正しい方法は何でしょうか?私は迷っている。タスクのこの種の

+0

ないがSEQ'に番号をすることになっていますか '。最後の3つのエントリは3,2,2と増分されませんか?あなたの基準は、同じ日付のID_NUMBでした。あなたが基準の一部として、オフィスで投げていても - 最終ID_NUMB 1はまだそれいけない、SEQ = 3を持っている必要がありますか? SEQための一時テーブル+ VBAへ – dbmitch

+0

クエリは非常に単純なアプローチです - あなたは一時テーブルを作成するために使用されるクエリの例がありますか?またはVBA?あなたはその方法に逆らっていますか? – dbmitch

+0

は、最初のコメント@dbmitchに応じて、それは実際にいくつかの要因の組み合わせです。あなたは最初のものが3であったはずの正しいものです、私はそれを変更します。他の2つは、別のオフィスまたは異なる時間(あるいはその両方)に出現した。それは最終的に...多分2番目の質問/コメントへ – dramerus

答えて

0

それはINNERテーブルT1に登録しようず - としそれはその場で、配列を構築する前に、単純なソート

SELECT 
    a.ID_NUMB, 
    a.ADJ_APPEAR_NUM, 
    a.OFFICE, 
    a.APP_TIME_PER AS TP, 
    Format(a.[APP_DTE],"Short Date") AS APP_DATE, 
    (SELECT Count(ID_NUMB) 
     FROM T1 b 
     WHERE (b.ADJ_APPEAR_NUM <= a.ADJ_APPEAR_NUM 
     AND b.ID_NUMB = a.ID_NUMB 
     AND b.OFFICE = a.OFFICE 
     AND b.APP_TIME_PER = a.APP_TIME_PER 
     AND b.APP_DTE = a.APP_DTE)) AS SEQ 
FROM T1 AS a 
ORDER BY a.ID_NUMB, a.OFFICE, a.ADJ_APPEAR_NUM; 

クエリは

(T1のためにあなたのデータを使用して)結果あなたの例からも明らか

Sample Query Results

0

、最もストレートフォワードの方法は、あなたが必要とする一連のよう命じたレコードをDAOを使用してレコードを開くために通常です。

次に、新しいレコードを強制的に更新する条件を記録しているレコードごとに、または以前のレコード番号にレコード番号を追加するレコードセットをループします。今度は、シーケンス番号を作成し、レコードを更新し、レコードがなくなるまで移動します。

編集:例ループ記録:私はこのSQLを使用して、(限定された例に基づいて)欲しいものに近いかもしれないと思う

Dim rst As DAO.Recordset 

'Me.RecordsetClone 
Set rst = Me.RecordsetClone 
rst.Sort = "Dato, ID asc" 
Set rst = rst.OpenRecordset() 
rst.MoveFirst 
While rst.EOF = False 
    Debug.Print rst!Dato.Value, rst!Id.Value 
' If SomeCondition = True Then 
     rst.Edit 
      rst!Dec1.Value = rst!Id.Value 
     rst.Update 
' End If 
    rst.MoveNext 
Wend 
+0

私はこのアプローチのサウンドが大好きです。しかし、それは私のスキルセットを少し超えているかもしれません。私はDAOを使ってレコードセットを開くことを検討しましたが、私はいくつかの引き抜きを自動化する一環として認証証明書を渡すことを検討していました。私はひどく成功したわけではありませんでしたが、私は勉強を続けてきました。上記のSQLに基づいて可能であると思いますか?または、テンポラリテーブルにデータを書き込む方が意味がありますか? – dramerus

+0

私はイラストレーションのためにいくつかのサンプルコードを追加しました。あなたはその考えを得るべきです。 – Gustav

関連する問題