2010-07-16 25 views
9

Hãy nói rằng tôi đã có bảng cơ sở dữ liệu sausáp nhập hai hàng một khi thay thế các giá trị null

Name | Nickname | ID 
---------------------- 
Joe Joey  14 
Joe null  14 

Bây giờ tôi muốn làm một tuyên bố chọn mà kết hợp hai cột này để một thời gian thay thế các giá trị null. Kết quả sẽ trông giống như sau:

Joe, Joey, 14 

Câu lệnh sql nào quản lý điều này (nếu có thể)?

+1

nên kết quả thực sự là "Joes" hoặc "Joe"? – ninesided

+0

Xin lỗi, lỗi của tôi. Đã sửa. –

+0

Bạn đã hợp nhất các cột nào theo cột? ví dụ: nếu bạn sẽ có hàng thứ ba XXX, null, 10. Truy vấn của bạn sẽ trở lại là gì? –

Trả lời

0

AFAIK, câu hỏi không rõ ràng. Tôi đang đưa ra một số giả định ở đây. đầu ra của bạn có các cột đầu tiên và thứ 3 cho cả hai hàng giống nhau. Chỉ trường thứ hai là khác nhau.

nên u chỉ đơn giản là có thể viết một chọn quest

select one.name,two.nick_name,one.id from 
(select name,id from your_tb group by name,id) one, 
your_tb two 
where two.nickname is not NULL 
and two.name=one.name 
and two.id=one.id; 

có thể chúng ta có thể điều chỉnh này, nhưng tôi không tốt trong squeries chỉnh sql, nhưng đây là cách tôi giả sử u cần.

11

đơn giản nhất giải pháp:

SQL> select * from t69 
    2/

NAME  NICKNAME   ID 
---------- ---------- ---------- 
Joe  Joey    14 
Joe       14 
Michael      15 
      Mick    15 
      Mickey    15 

SQL> select max(name) as name 
    2   , max(nickname) as nickname 
    3   , id 
    4 from t69 
    5 group by id 
    6/

NAME  NICKNAME   ID 
---------- ---------- ---------- 
Joe  Joey    14 
Michael Mickey    15 

SQL> 

Nếu bạn có 11gR2 bạn có thể sử dụng the new-fangled LISTAGG() function nhưng nếu không nó đơn giản là đủ để bọc các tuyên bố trên trong một SELECT mà concatenates các cột NAME và NICKNAME.

+1

câu trả lời xuất sắc – Mukus

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