2017-05-25 10 views
0

私は、店頭注文のステータスを追跡するERPシステムにテーブルを持っています。コード1〜6を持つオープン日付(列名ORGDUE_10)と状態列(STATUS_10)を持ち、ステータス3はオープン注文であり、ステータス4は閉じています(残りのコードはこのアプリケーションでは関係ありません)。残念ながら、この表には、注文がクローズされた日付を取得できるタイムスタンプ列はありません。複数のショップオーダーが閉鎖されているか(STATUS_10が3から4に変更されたか)、期限を過ぎているかどうか(ORGDUE_10)を判断する必要があります。タイムスタンプを追加するSQLクエリ

どのように私はこれを達成するためのクエリを行うことができますか?私は別のテーブルが必要であると仮定します - それにデータを書き込んでから、何らかのトリガーを書きますか?

私はVS2015を使用しています。 Order_Master

STATUS_10  ORDNUM_10 PRTNUM_10  CURDUE_10 
4   | 50015246 |ASY5670 | 9/4/2017 
3   | 50016983 |ASY5699 | 5/15/2017 
+1

基本的に、閉じる日付を記録するテーブルが必要です。適切な列を追加するには「テーブル」を変更するか、ショップ注文番号と終了日を保持する「別のテーブル」を作成します。ステータスが4になったことを検出するメインテーブルのトリガーによって駆動されるものに挿入します。テーブルには名前があります。実際に取得したものを見積もることができない場合は、1つを偽(SHOP_ORDERSなど)します。どのくらいの頻度で人々がSQLの質問をし、テーブル名を与えないかは(私にとって、私には)驚くべきことです。 –

+0

@Jonathon Leffler、あなたの迅速な対応に感謝します。私が編集できないテーブル名はOrder_Masterです。 2番目のテーブルSO_StatusとカラムStatus(nchar10)、CurDue(Date)、Comp_Date(date)を追加しました。私は元の質問でこれらの詳細を見逃していることを心から謝ります。 –

+0

あなたはそのような情報を紛失しているだけではありません。それはよくある問題です。私は現在、あなたがトリガーを作成するのに助けが必要かどうか、またはトリガーを適切に配置できるようになったので、2つのテーブルから選択するためにSQLを作成するかどうかはわかりません。あなたのサンプルデータは 'CURDUE_10'です。あなたのテキストには 'CURDUE_10'ではなく' ORGDUE_10'と書かれています。私はあなたが2番目のテーブルのいくつかのサンプルデータを提供する必要があると思う - それは、2つの行が期限切れであったものと2つのものがないものと、そして「Order_Master」からの対応するデータを持つことは良いでしょう。期待される出力を得ることは有益でしょう。 (MCVE - [MCVE])。 –

答えて

0

である私が編集することはできませんテーブル名は私が(私は思う)それを考え出しました。私が使ったコードはここにありますが、そのトリックをするようです。このコードは、2つの異なるサーバー上の2つの異なるテーブルを更新、挿入、および条件付きタイムスタンプ(日付スタンプ)します。私はこれが理にかなって、他の誰かを助けることを願っています@Jonathan Lefflerに与えられた助けに感謝します。申し訳ありませんが、私はあなたにそれを簡単にしませんでした。

MERGE server2.dbo.table2 AS target /* the added server.dbo is in the event the two tables are 
on different sql servers*/ 
USING server1.dbo.table1 AS source ON (target.column-t = source.column-s) /* 
column-t is the target column and column-s is the matching source column */ 
WHEN MATCHED AND (conditional column) AND (antoher conditional column) THEN 
UPDATE SET 
    column-t = source.column-s, column-t (for datestamp) = (GETDATE()) 
WHEN NOT MATCHED AND (conditional column) AND (antoher conditional 
column)THEN  /* you cannot use a WHERE clause in a MERGE but you can set 
up similar conditions in the WHEN statements */ 
INSERT (target columns) 
VALUES (source columns in same order as target columns); 
関連する問題