2017-08-17 12 views
-1

2つのテーブルItemMasterとItemDetailがあります。両方のテーブルの列を表示するレポートを作成しています。詳細テーブルのSQL Server値

"ItemMaster"テーブルの最初の3列を表示し、次に "ItemDetail"テーブルのMax(FinishDate)とMax(Amount)を表示します。

以下のような結果を生成しようとしましたが、動作しませんでした。

このお試しください おかげ

SELECT IM.ItemCode, 
     IM.Customer, 
     IM.FinYear, 
     DET.FinishDate, 
     DET.Amount 
FROM ItemMaster AS IM 
INNER JOIN (SELECT MAX(FinishDate) AS FinishDate, MAX(Amount) AS Amount 
       FROM ItemDetail ID 
       WHERE IM.ItemCode = ID.ItemCode) AS DET 
ON IM.ItemCode = DET.ItemCode 

enter image description here

+2

を – TheGameiswar

+0

質問を改善する方法についての詳細を知るには、このリンクをご覧ください期待される結果とDDLとないイメージなど、実際の結果を貼り付けてください。 https://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ – TheGameiswar

答えて

0

を:

SELECT IM.ItemCode, 
     IM.Customer, 
     IM.FinYear, 
     DET.FinishDate, 
     DET.Amount 
FROM ItemMaster AS IM 
INNER JOIN (SELECT ID.ItemCode, 
        MAX(FinishDate) AS FinishDate, MAX(Amount) AS Amount 
       FROM ItemDetail ID 
       GROUP BY ID.ItemCode) AS DET 
ON IM.ItemCode = DET.ItemCode 

ItemCodeフィールドでは、適切なJOINを実行できるようになりました。

+0

おかげさまで、あなたの提供されたソリューションもうまくいった – Nadeem

+0

パフォーマンスとして、あなたの提供されたソリューションが最高でした。 – Nadeem

0

を助けてください:あなたはGROUP BY句を含むように派生テーブルのクエリを少し変更する必要が

SELECT IM.ItemCode , 
      IM.Customer , 
      IM.FinYear , 
      DET.FinishDate , 
      DET.Amount 
    FROM ItemMaster AS IM 
      CROSS APPLY (SELECT MAX(FinishDate) AS FinishDate , 
            MAX(Amount) AS Amount 
          FROM  ItemDetail ID 
          WHERE  ID.ItemCode = IM.ItemCode 
         ) AS DET 
+0

ご協力いただきありがとうございます。提供されたソリューションは動作しました – Nadeem

0

サブ選択は不要ですが、imho。あなたは、単一のテーブルの上に行うようにするだけ両方のテーブルや集計に参加:

select im.ItemCode, im.Customer, im.FinYear, 
     MAX(id.FinishDate), MAX(id.Amount) 
    from ItemMaster im 
    join ItemDetail id 
    on im.ItemCode = id.ItemCode 
    group by im.ItemCode, im.Customer, im.FinYear 
+0

ご協力いただきありがとうございます。 – Nadeem

関連する問題