2016-04-13 4 views
0

私は以下のような表を持っています。私は2つのことをしたいと思います。 1st。 Min(EnterDtm)レコードを選択します。この場合、2015-08-25 05:29:44:480となります。私はまた、高さフィート、高さインチ、および新しい列名としての重量キログラムを持っており、それぞれの新しい列の下ObsText複数の行から1行に複数の列があり、最小の日付を持つ

EnterDtm     ObsCatalogName VisitID OBSTEXT 
2015-08-25 05:29:44.480 AS height feet NU 219975 5 
2015-08-25 05:29:44.480 AS height inches NU 219975 5 
2015-08-25 05:29:44.480 AS weight kg CAL 219975 88 
2015-08-25 07:05:11.173 AS weight kg CAL 219975 90.6 
2015-08-26 06:36:43.537 AS weight kg CAL 219975 90.5 
2015-08-26 21:22:21.550 AS height feet NU 219975 5 
2015-08-26 21:22:21.550 AS height inches NU 219975 6 
2015-08-26 21:22:21.550 AS weight kg CAL 219975 90.5 
2015-08-27 05:55:27.373 AS weight kg CAL 219975 87.4 

私はそれがこの

EnterDtm     VisitID Height Feet Height Inches Weight 
2015-08-25 05:29:44.480 219975 5    5    88 
に見えるようにしたいがある単一のレコード行を持つようにしたいです
+0

3 case文あなたのエンジンがサポートしている場合はmaxとGROUP BYまたはピボット。これはRDBMSですか? – xQbert

+0

SQL Server 2012 – user3666224

+0

したがって、2015-08-25 07:05:11.173が最も早い日付の場合...データの高さは正しくありませんか? – xQbert

答えて

0

最初に、共通のテーブル式With cte(簡単にインラインビューを使用することができます)のデータセットを、ケースステートメントを使用して必要な形式のフィールドを含むデータセットを生成します。

これは、日付と訪問に基づいてamxを使用してフィールドを1つのレコードに結合し、その日付によって注文された訪問にランクを割り当てます。

私はその後、各VISITID

テストされていないため、ランクが1(最低enterDTM)であるCTEで生成されたデータセットからすべてのレコードを選択:

With CTE AS (
Select EnterDTM 
,OVisitID 
,max(case when OBSCatalogName = 'height feet NU' then OBStext end) as [Height Feet] 
,max(case when OBSCatalogName = 'height inches NU' then OBStext end as [Height Inches] 
,max(case when OBSCatalogName = 'weight kg CAL' then OBStext end as [Weight] 
Rank() over (partition by VisitID, EnterDTM order by enterDTM) RNK 
FROM TableName A 
GROUP BY EnterDTM, VisitID) 
Select from cte where RNK = 1 
0

あなたは以下のピボットクエリを試すことができます

select 
EnterDtm, 
VisitID, 
[height feet NU] as [Height Feet], 
[height inches NU] as [Height Inches], 
[weight kg CAL] as [Weight] 
from 
(
    select 
    t.EnterDtm, 
    t.ObsCatalogName, 
    t.VisitID, 
    t.OBSTEXT 
from tbl t 
    inner join (select min(EnterDtm) MinDtm from tbl) t2 
    on t.EnterDtm=t2.MinDtm 
)source 
pivot 
(
max(OBSTEXT) for ObsCatalogName in ([height feet NU],[height inches NU],[weight kg CAL]) 
)p