2017-12-11 1 views
2

私はSQL Server 2014を使用していて、簡単なT-SQLクエリ(下図参照)とそれに対応する出力を持っています。どのようにしてT-SQLクエリが不一致の値をゼロとして出力するようにしますか?

use mydatabase 

select * 

from Table1 

where ID in (101, 102, 103) 

次のように出力が(ID 102は、表1には存在しないという意味)である:

ID Age 
101 46 
103 50 

次のように私は出力になりたい:

ID Age 
101 46 
102 0 
103 50 

一致がない場合にはルックアップテーブル内のIDについては、出力はこれらのIDを省略します。 T-SQLクエリを変更して、一致しないIDも出力されますが、ゼロであることを確認するにはどうすればよいですか。

+2

あなたのIDはすべて保存されていますか? –

+0

IDはデータベース内の異なるテーブルの主キーですが、すべてのIDSが保持されるテーブルはありません。 – user3115933

+0

IDのテーブルを持っていない場合、どのIDが実際のIDで、どのテーブルから「欠落しているか」を知る方法は? – Larnu

答えて

0

2つ以上の表があり、ある表に一致するものが見つからない場合にいくつかのデフォルト値を表示する場合は、SQLで外部結合を使用できます。例については

私は2つのテーブルテーブルAとテーブルBを持っています。

私が内部結合をしているとき、両方のテーブルに一致するレコードを取得します。私は両方のテーブルからID 1,2および3を選択する必要があり、1つのIDがTableBの中に存在していない場合でも、私はNULLとしてレコードをしたいと仮定し、その後、私はここでは、この

select 
A.Id, 
A.Name, 
Age = ISNULL(B.Age,0) 
    from TableA a 
    left join TableB b 
    on A.id = b.id 

年齢を使用することができますが0と表示されますテーブルBのidに一致するレコードがない場合

0

あなたが探している値を持つテーブルを持っていない場合は、joinを使用していることを行うと、coalesce()またはisnull()機能

select a.id, coalesce(t.age, 0) [Age] from <table> t 
right join (
     values (101), (102), (103) 
) a(id) on a.id = t.id 

結果の助けを借りて、0で不一致値を置き換えることができます:

id Age 
101 46 
102 0 
103 50 
0
SELECT T0.ID 
     ISNULL(T1.Age,0) AS Age 
FROM Table0 T0 
    LEFT JOIN Table1 T1 ON T0.ID = T1.ID 
WHERE T0.ID IN (101,102,103); 
関連する問題