2009-02-02 34 views
12

Tôi đang viết truy vấn SQL trong SQL Server, trong đó tôi cần phải thay thế nhiều giá trị chuỗi bằng một giá trị chuỗi đơn. Ví dụThay thế nhiều chuỗi trong truy vấn SQL

Product  Quantity 
-------  -------- 
Apple  2 
Orange  3 
Banana  1 
Vegetable 7 
Dairy  6 

sẽ trở thành

Product  Quantity 
-------  -------- 
Fruit  2 
Fruit  3 
Fruit  1 
Vegetable 7 
Dairy  6 

Cách duy nhất tôi biết làm thế nào để làm điều này là sử dụng một lồng REPLACE trong mệnh đề SELECT.

SELECT 
    REPLACE('Banana', REPLACE('Orange', REPLACE('Banana', Product, 'Fruit'), 
      'Fruit'), 'Fruit') AS Product 
FROM 
    Table 

Có cách nào dễ dàng hơn không?

EDIT: Có thể có các giá trị khác trong danh mục Sản phẩm. Xem ví dụ đã chỉnh sửa ở trên.

Trả lời

20

BradC có câu trả lời tốt nhất cho đến nay, nhưng trong trường hợp bạn vì một lý do không có khả năng tạo ra các bảng bổ sung Tôi muốn gửi một chuyển thể từ câu trả lời Kibbee của:

SELECT 
    CASE WHEN Product IN ('Banana', 'Apple', 'Orange') Then 'Fruit' 
    ELSE Product END 
FROM [Table] 
+0

Điều này sẽ làm việc tốt nhất cho mục đích của tôi vì cơ sở dữ liệu tôi đang kéo là một kho lưu trữ. Nếu không, việc thêm cột danh mục sẽ là cách để đi. Cảm ơn! –

+0

Anh ấy đang nói thêm một bảng tra cứu nhỏ và điều đó khá dễ thực hiện, ngay cả đối với một tệp lưu trữ db. –

1

Nếu không có các sản phẩm khác thuộc đối tượng nêu bạn có thể làm:

SELECT 'Fruit' AS Product, 
     Quantity 
FROM Table 

Nếu có các sản phẩm khác jus thêm một mệnh đề WHERE

WHERE Product IN ('Banana', 'Orange', 'Apple') 
7
Select 
Case Product WHEN 'Banana' Then 'Fruit' 
WHEN 'Apple' Then 'Fruit' 
WHEN 'Orange' Then 'Fruit' 
ELSE Product 
END 
FROM Table 
+0

này là hữu ích. Cảm ơn. –

11

Thực hiện một "thể loại" mới bảng có danh sách các sản phẩm của bạn, cùng với "danh mục" mà chúng thuộc về.

Sau đó, chỉ cần tham gia bên trong.

+0

điều đầu tiên tôi nghĩ đến. – dotjoe

+2

+1 một trong số này là cách để làm điều đó – SQLMenace

+0

Đây sẽ là một giải pháp tốt ngoại trừ việc tôi đang kéo từ một kho lưu trữ chỉ đọc. –

1

Bạn có thể tạo bảng tạm thời với cột 'Sản phẩm' cột đơn và chèn tất cả tên sản phẩm bạn muốn thay thế.

Sau đó, thực hiện kết nối bên trong với bảng mục tiêu để cập nhật.

UPDATE 
    Table 
SET Product = 'Fruit' 
FROM 
    Table t1 INNER JOIN #Table t2 on t1.Product = t2.Product 
0

Dấu nháy đơn để phân định văn bản trong SQL:

CASE WHEN ShiptoPlant IN (';','/',' ') Then '' ELSE ShipToPlant END 
Các vấn đề liên quan