2017-02-02 9 views
0

表の結果と値の最小値を選択:は、すべての列

 ID  CAt  date   BS BD 
     19048 4  12/10/2013 132 68 
     19048 4  12/10/2013 2:43 138 78 
     19048 4  12/10/2013 2:44 128 74 
     19048 4  12/10/2013 2:45 140 80 
     19048 4  6/30/2014 22:07 146 88 
     19048 4  6/30/2014 22:07 148 88 
     19048 4  6/30/2014 22:08 138 86 
     19048 4  6/30/2014 22:08 132 80 

私は、各IDと日付のBSの分とBDをしたいです。

の予想される出力

 ID  CAt date    NAME Value 
     19048 4 12/10/2013   BS  128 
     19048 4 12/10/2013   BD  68 
     19048 4 6/30/2014   BS  132 
     19048 4 6/30/2014   BD  80 
+0

これまでに試したことを示すことはできますか? – EJoshuaS

+2

期待する出力はいくつありますか? –

+0

私はアウトプット2を欲しい@Prdp –

答えて

3

あなたがGroup ByMin集計を必要としています。

あなたがデータをアンピボットする必要がgroup by

select ID,CAt, min([date]),Min(BS),Min(BD) 
From yourtable 
Group by ID,CAt,cast([date] as Date) 

cast([date] as Date)は、第二の出力については、各date

分間BSBDを見つけるために使用されるこの方法を試してみてください

SELECT ID,CAt,[date] = Min([date]),name,value = Min(value) 
FROM yourtable 
     CROSS apply (VALUES ('bs',bs), 
          ('bd',bd)) cs (name, value) 
GROUP BY ID,CAt,Cast([date] AS DATE),name 
+0

thnksあなたは私に出力2を与えることができます。 @prdp –

+0

@rohitpatil - 2番目のクエリを確認してください。 –

0

MIN ()は、グループごとに最小値を選択します。日付()はID、猫、日付によってDATETIME列の日付部分のみ

SELECT ID , CAT, n.DATE, min(BS) AS BS, min(BD) AS BD FROM test.new_table AS n group by ID, Date(n.DATE); 
1

まずグループを選択し、グループ化された行からの最小値と最大値を取得する:

select ID, CAt, date, 
    (case when BS>=0 then 'BS' else 'BD' end) as NAME , 
    (case when BS>=0 then BS else BD end) as Value from 
    (select ID, CAt, date , min(BS) as BS, -1 as BD 
    from table_name 
    group by ID, CAt, date 
    union all 
    select ID, CAt, date , -1 as BS, min(BD) as BD 
    from table_name 
    group by ID, CAt, date 
    ) as A 

また、グループの列の異なるグループによって必要に応じて。

+0

Good Onr thnks。それは完璧だ。しかし、min()関数を追加してください。 –

関連する問題