2010-05-26 23 views
10

Bir PostgreSQL veritabanı kullanıyorum ve bazı ölçümleri temsil eden bir tabloda iki sütun var: ölçüm ve enterpolasyonlu. İlk önce gözlem (ölçüm) ve ikinci olarak yakındaki değerlere bağlı olarak enterpolasyonlu değer. Orijinal bir değere sahip her kayıt da enterpolasyonlu bir değere sahiptir. Ancak, "orijinal" gözlemler (NULL) olmaksızın çok fazla kayıt var, dolayısıyla değerler enterpolasyonlu ve ikinci sütunda saklanıyor. Yani temelde veritabanında sadece iki durum vardır: ElbetteSQL Bir alanın değerine bağlı olarak iki alan arasında seçim yapın

Value Value 
NULL Value 

, nedenle ilk sütundan veri seçmek için bir sorgu oluşturmak için kullanılabilir gerekirse birinci sütundaki değeri kullanmak daha iyidir ve mevcut değilse (NULL), veritabanı, söz konusu kayıt için ikinci sütundaki değeri döndürür. SQL sorgusunu nasıl oluşturacağımı bilmiyorum.

Lütfen

Yardım edin. Teşekkürler.

cevap

27

Sen Coalesce kullanabilirsiniz:

COALESCE fonksiyon boş değil Bağımsız değişkenlerinin ilk döndürür. Boş, yalnızca tüm argümanlar boşsa döndürülür. aksi NULL, second_value değilse

Select Coalesce(first_value, second_value) 
From your_table 

Bu first_value dönecekti.

+0

İlk değer null ise üçüncü bir değer istiyorsanız ne olur? – Joe

+1

Bunu mu demek istediniz? COALESCE (first_value, second_value, third_value) '? Bu, hem birinci hem de ikinci değer "NULL" ise, 'üçüncü_değer' döndürür. –

+0

teşekkürler, ancak sadece ilk değer boşsa üçüncü değeri istiyorum. İstediğimi elde etmek için anladım, bir seçim 2 seçim yaptım. İlk seçim, birinci değerlerin null olmadığı ikinci kayıtların null olduğu ilk kayıtları, birinci değeri null olarak belirledikten sonra, bu ismi gerçekleştirir. Bu ad, Soyadı, (Varchar (10), h.ID, 108) Soyadı, – Joe

8

Peter çivilenmiş. Ama bütünlük uğruna (sorunuzun başlığı belirli bir meseleden daha geneldir), burada Postgresql (ve diğer birçok veritabanında) bulunan conditional expressions'un (ve diğer bazı veritabanlarında): CASE, COALESCE, NULLIF, GREATEST, LEAST. İlki en genel olanıdır.

İlgili konular