2010-05-26 33 views
10

Tôi đang sử dụng cơ sở dữ liệu PostgreSQL và trong bảng biểu diễn một số phép đo tôi có hai cột: đo lường và nội suy. Trong lần đầu tiên tôi đã quan sát (đo lường), và trong lần thứ hai giá trị nội suy phụ thuộc vào các giá trị lân cận. Mỗi bản ghi có giá trị ban đầu cũng có giá trị nội suy. Tuy nhiên, có rất nhiều bản ghi không có quan sát "nguyên bản" (NULL), do đó các giá trị được nội suy và được lưu trữ trong cột thứ hai. Vì vậy, về cơ bản chỉ có hai trường hợp trong cơ sở dữ liệu:SQL Chọn giữa hai trường tùy thuộc vào giá trị của một trường

Value Value 
NULL Value 

Tất nhiên, nó là thích hợp hơn để sử dụng giá trị từ cột đầu tiên nếu có, vì thế tôi cần phải xây dựng một truy vấn để chọn dữ liệu từ cột đầu tiên và nếu không có sẵn (NULL), thì cơ sở dữ liệu sẽ trả về giá trị từ cột thứ hai cho bản ghi được đề cập. Tôi không có ý tưởng làm thế nào để xây dựng các truy vấn SQL.

Vui lòng trợ giúp. Cảm ơn.

Trả lời

27

Bạn có thể sử dụng Coalesce:

Chức năng COALESCE trả về đầu tiên của đối số của nó mà không phải là null. Null được trả về chỉ khi tất cả các đối số là null.

Select Coalesce(first_value, second_value) 
From your_table 

này sẽ quay trở lại first_value nếu nó không phải là NULL, second_value khác.

+0

điều gì sẽ xảy ra nếu bạn muốn giá trị thứ ba nếu giá trị đầu tiên bằng không? – Joe

+1

Bạn có nghĩa là 'COALESCE (first_value, second_value, third_value)'? Điều này sẽ trả về 'third_value' nếu cả giá trị đầu tiên và thứ hai là' NULL'. –

+0

cảm ơn nhưng tôi muốn giá trị thứ ba chỉ khi giá trị đầu tiên là null. Tôi đã tìm ra để có được những gì tôi muốn tôi đã làm một UNION của 2 lựa chọn. Đầu tiên chọn có tất cả các bản ghi mà firstvalue là không null lựa chọn thứ hai nơi giá trị đầu tiên là null và làm điều này v.Name như FirstName, CONVERT (varchar (10), h.ID, 108) như LastName, – Joe

8

Peter đóng đinh nó. Nhưng vì mục đích hoàn chỉnh (tiêu đề câu hỏi của bạn tổng quát hơn vấn đề cụ thể của bạn), ở đây, các tài liệu cho một số conditional expressions có sẵn trong Postgresql (và trong một số cơ sở dữ liệu khác): CASE, COALESCE, NULLIF, GREATEST, LEAST. Cái đầu tiên là tổng quát nhất.

Các vấn đề liên quan