2016-12-07 7 views
0

テーブルに一致するデータがなくても行を返すクエリが必要です。私は空の結果セットが返されることを知っていますが、私のプロジェクトの必要性として、結果セットで行を取得する必要があります。値はnullでも構いません。 |空の結果セットの代わりに定義された行を取得します。SQL Server

Demographic_Id:以下は私のクエリです:

select Demographic_Id, Total from school.Demographic_Profile where Demographic_Id=2 

が2に等しいDemographic_Idとのデータがありませんがそれでも私はこのような結果を取得する必要があります合計

 2   | NULL 

+0

はあなたが必要な場合がありますすべてのdemographic_idsを持つテーブルがありますか? – SQLChao

+0

この質問は解決されますか?さらに助けが必要ですか?私に1つのヒントを許してください:この質問が解決された場合は、(最良の)回答の投票カウンタの下で受け入れ検査をチェックすることは、非常に親切です。これは、1)この問題を解決済みとマークします。2)フォロワーが最良の解決策を見つけるのをより簡単にします。3)回答者にポイントを払います。 15ポイントのボーダーを越えたので、あなたは - さらに - 寄付に投票するよう求められます。これは、ありがとうと言います。ハッピーコーディング! – Shnugo

答えて

1

あなたは正確に1行またはゼロの行を取得したい場合は、トリックは、集計を使用することです:

select 2 as Demographic_Id, max(Total) as Total 
from school.Demographic_Profile 
where Demographic_Id = 2; 
+0

これは役に立ちましたが、ほとんど変更なしで –

+0

は、Demographic_Id、school.Demographic_Profileからの合計(2) –

+0

@shaikirshadsharifのDemographic_Idで、ISNULL(MAX(Demographic_Id)、2)を選択します。 。 。さらに単純化することもできます。 –

0

また、あなたはCTEを使用する可能性があります外部結合

select v.did As Demographic_Id, 
     Total 
from (values(2)) v(did) 
LEFT JOIN school.Demographic_Profile ON Demographic_Id=v.did 
0

を使用することができます。 CTEは派生テーブルを作成します。 UNION ALLは1つの行を追加しますが、クエリによって行が返されなかった場合にのみ追加されます。そうしないと、クエリは期待と同じように返されます:あなたのケースのために

WITH CTE AS 
(
    SELECT object_id 
      ,name 
    FROM sys.objects 
    WHERE name='non-existent' 
) 
SELECT * FROM CTE 
UNION ALL 
SELECT 2,NULL WHERE (SELECT COUNT(*) FROM CTE)=0 

はこれを試してみてください。

DECLARE @id INT=2 
WITH CTE AS 
(
    select Demographic_Id, Total 
    from school.Demographic_Profile 
    where [email protected] 
) 
SELECT * FROM CTE 
UNION ALL 
SELECT @id,NULL WHERE (SELECT COUNT(*) FROM CTE)=0 
0
select Demographic_Id, Total from 
    (SELECT 1 as did 
    UNION ALL 
    SELECT 2 as did 
    UNION ALL 
    SELECT 3 as did) as innerQuery 
    left outer join school.Demographic_Profile on did = Demographic_Id 
関連する問題