質問: 0 THEN NULL ELSE 日付2 END) as plnk FROM tbl_table1 WHERE 商品NO=100 GROUP BY 商品NO ``` このSQLから条件を追加して実現したいのですが可能でしょうか。 最終的な結果が | 商品NO | plnt | plnk | | --- | --- | --- | | 100 | 2018-04-02 | 2018-04-04 | が望ましいです。 よろしくお願いいたします。 申し訳ございません。条件を詳しく書くと、 IDが「2」で種類が「1」の日付1の値(2018-04-02)はSQLでいうと、 ``` SELECT TOP 1 商品NO,日付1 FROM tbl_table1 WHERE 種類=1 ORDER BY ID DESC ``` つまり、種類が「1」で一番最後に登録されたレコード を取得したいということです。 IDが「4」で種類が「2」の日付2の値(2018-04-04)も同様です。 日付1及び2はNULL以外にdatetimeの初期値(1900-01-01 00:00:00.000)も含まれる場合もあります。 説明不足により申し訳ございませんが、よろしくお願いいたします。
回答: 商品NO毎に出す必要があるならこうかなあ。 未検証です。『最新』とか『IDが最大』とかやりたいならapply系をおすすめします。 確かバージョン2008以降なら使えるはず。 ``` select X.商品NO,lnt.日付1,lnk.日付2 from ( select 商品NO from tbl_table1 group by 商品NO ) as X outer apply ( select top 1 A.* from tbl_table1 as A where A.商品NO=X.商品NO and A.種類ID=1 order by A.ID desc ) as lnt outer apply ( select top 1 B.* from tbl_table1 as B where B.商品NO=X.商品NO and B.種類ID=2 order by B.ID desc ) as lnk ``` 商品NOが主キーのテーブルがあればXは不要なんですが。