2017-06-27 25 views
0

私は、測定タイプを格納するために関連する列としてタイプの異なるメージャー値を格納できるテーブルを持っています。自己結合+ Sqlサーバーの左結合

次はデータ

enter image description here

私はHTと日付に基づいて重量値を取得するには、テーブルを結合し、自己にできる午前のサンプルテーブルです。私の要件は、その日付のhtがテーブルにない場合でも、すべての日付のwt値が必要です。

サンプル結果

enter image description here

編集:私は、クエリの下に試みたが、それは最初の行のみを返しています。

SELECT 
    ta.uid, ta.value as 'wt', lta.value as 'ht', ta.date,ta.id as lftid, lta.id as rtid FROM 
    [test].[dbo].[tbl2] ta 
    LEFT JOIN [test].[dbo].[tbl2] Lta 
     ON ta.[date] = Lta.[date] 
     AND ta.[uid] = 11 WHERE 
     ta.type = 'wt' 
    AND Lta.type ='ht' 

答えて

0

SELECT 
    ta.uid, ta.value as 'wt', lta.value as 'ht', ta.date,ta.id as lftid, lta.id as rtid FROM 
    [test].[dbo].[tbl2] ta 
    LEFT JOIN [test].[dbo].[tbl2] Lta 
     ON ta.[date] = Lta.[date] 
     AND ta.[uid] = 11 and ta.type<>Lta.type 
     WHERE 
     ta.type = 'wt' 
    AND isnull(Lta.type,'ht') ='ht' 
+0

私が探しているものとまったく同じです。ありがとうございました。 – Ankith

0

あなたleft joininner joinへの変更を効果的where句で右エイリアスに参照のうえされているという事実。
Read this answer to find out why.
、それを避けるon句にwhere句で条件を移動するには:それは動作するはずですあなたのクエリにわずか数の変更により

SELECT ta.uid, 
     ta.value as 'wt', 
     lta.value as 'ht', 
     ta.date, 
     ta.id as lftid, 
     lta.id as rtid 
FROM [test].[dbo].[tbl2] ta 
LEFT JOIN [test].[dbo].[tbl2] Lta 
ON ta.[date] = Lta.[date] 
AND ta.type = 'wt' 
AND Lta.type ='ht'   
WHERE ta.[uid] = 11 
+0

ことではありません所望の結果を与える。代わりに、すべてのmvaluesがwtカラムの予想以上の行を作成しています。 – Ankith