2017-12-20 17 views
0

私は典型的な注文ヘッダと注文ラインテーブルを持っています。 これは、私はそれが各倉庫に返すSQLサーバーでの問合せ、アイテムごとラストオーダーラインを実行する必要が簡略化されDDL(そこに、より多くのフィールドがありますが、この質問のために重要ではありません)商品ごとの最終取引を取得

CREATE TABLE [dbo].[OrderHeader](
    [id] [nvarchar](50) NOT NULL, 
    [voucherDate] [datetime] NOT NULL, 
    [voucherNumber] [bigint] NOT NULL, 
    [voucherType] [nvarchar](50) NOT NULL, 
    [account] [nvarchar](50) NULL, 
    [po] [nvarchar](50) NULL, 
    [total] [decimal](19, 3) NOT NULL, 
    [status] [tinyint] NOT NULL, 
    [discount] [decimal](19, 3) NOT NULL, 
    [rounding] [decimal](19, 3) NULL, 
    [net] [decimal](19, 3) NOT NULL, 
    [warehouse] [nvarchar](50) NULL, 
CONSTRAINT [PK_OrderHeader] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 


CREATE TABLE [dbo].[OrderLine](
    [header] [nvarchar](50) NOT NULL, 
    [line] [int] NOT NULL, 
    [item] [nvarchar](50) NULL, 
    [quantity] [decimal](19, 3) NOT NULL, 
    [price] [decimal](19, 3) NOT NULL, 
    [discount] [decimal](19, 3) NOT NULL, 
    [total] [decimal](19, 3) NOT NULL, 
CONSTRAINT [PK_OrderLine] PRIMARY KEY CLUSTERED 
(
    [header] ASC, 
    [line] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

です。

ので

warehouse 1 
     item1, Order20, line 3 
     item2, Order 40, line 1 

    warehouse 2 
     item1, Order25, line 1 

等...同じ倉庫内

複数の注文は、それが最新の順序にする必要があり、この場合には、同じ項目について同じ日に存在する可能性があります。私はorderDateのDateTimeを使用していません、それはちょうど日付です。

これを行う簡単な方法はありますか?

+1

あなた自身でまだ質問を書いてみましたか?私はこれを本当に期待しているだけでなく、あなたの答えをもっと簡単に得ることができるからです。 –

+0

テーブルに_columns_があり、フィールドはありません。 – jarlh

答えて

0

使用可能なサンプルデータ(DDL)がない場合、これは推測です。動作しない場合は、投稿を編集してこの回答に返信してください。

WITH CTE AS (
    SELECT OH.Warehouse, 
      OL.Item, 
      OH.OrderNbr, 
      OH.LineNbr, 
      ROW_NUMBER() OVER (PARTITION BY OH.Warehouse, OL.LineNbr ORDER BY OrderDate) AS RN 
    FROM OrderHeader OH 
     JOIN OrderLine OL ON OH.OrderNbr = OL.OrderHbr) 
SELECT Warehouse, 
     Item, 
     OrderNbr, 
     LineNbr 
FROM CTE 
WHERE RN = 1; 

最新の注文が同じ日にあった場合の決定方法を定義していないことに注意してください。それが問題である場合は、ORDER BYを編集する必要があります(または投稿を編集する)。

+0

クイック返信ありがとうございます。私はテーブルのDDLを追加しました。私は最新の注文が何であるかを知っていると思います。私はvoucherDateとvoucherNumberで行く必要があります。 – daoud175

+0

@ daoud175サンプルデータとそのDDLの期待される結果がなければ、それ以上は教えてくれません。私が提供したものを試しましたか?私が言ったように、あなたはおそらく 'ORDER BY'にもう少し追加する必要があるでしょうが、これが正しい軌道に乗っていると想像します。 – Larnu

+0

はい私は試みた。同じ商品/倉庫の組合せが複数回表示されています。 max(orderDate)が得られないはずですか? – daoud175

関連する問題