2012-05-01 17 views
5

Tôi đang cố gắng sử dụng CASE trong câu lệnh SQL Select sẽ cho phép tôi nhận kết quả nơi tôi có thể sử dụng độ dài của một chuỗi để tạo lại các chuỗi của một chuỗi khác. Đây là các bản ghi không phù hợp từ hai tập dữ liệu có chung ID nhưng là Nguồn dữ liệu biến thể.Sử dụng Case để khớp các chuỗi trong máy chủ sql?

tuyên bố trường hợp là dưới đây:

Select Column1, Column2, 
Case 
When Column1 = 'Something" and Len(Column2) = '35' Then Column1 = "Something Else" and substring(Column2, 1, 35) 
End as Column3 
From dbo.xxx 

Khi tôi chạy nó tôi nhận được lỗi sau:

Msg 102, Level 15, State 1, Line 5 Incorrect syntax near '='.

+1

Đó SQL không có ý nghĩa. Bạn có thể đưa ra một số dữ liệu ví dụ và hiển thị những gì bạn mong đợi xảy ra không? –

+0

Đây là sql chính xác: Chọn DATA_SOURCE, CustomerID, TRƯỜNG HỢP KHI DATA_SOURCE = 'Test1' và Len (CustomerName) = '35' Sau đó DATA_SOURCE = 'Test2' và substring (CustomerName, 1, 35) End AS CustomerName Từ dbo.xx – user1368436

+0

Data_Source CustomerID CustomerName Kiểm tra xxx xxx PLC, (LONDON BR Test1 xxx xxx PLC (LONDON BR2) – user1368436

Trả lời

1
Select 
    Column1, 
    Column2, 
    Case 
     When Column1 = 'Something' and Len(Column2) = 35 
     Then 'Something Else' + substring(Column2, 1, 35) 
    End as Column3 
From dbo.xxx 

Cập nhật truy vấn của bạn trên

  1. sử dụng '+' cho chuỗi concat
  2. len() trả về int, không cần phải sử dụng ''
  3. remove "COLUMN1 =" trong trường hợp khi điều kiện
  4. thay thế "" với ''

Hope trợ giúp này.

+0

Xin chào Seanbun, cảm ơn vì đề xuất của bạn Tôi không muốn ghép bất kỳ dữ liệu nào ở đây. Tôi đang tìm hiểu lý do tại sao '=' gây ra lỗi sau THEN của tôi hoặc gợi ý làm thế nào tôi có thể sử dụng WHEN để tạo điều kiện cho các bản ghi với cùng một ID, Nguồn dữ liệu biến thể để khớp với chiều dài trả về của một cánh đồng. – user1368436

+0

Trợ giúp 'Khác' có giúp không? như dưới đây hoặc bạn có thể khai báo một biến @Result để lưu trữ giá trị của bạn và trả lại ở cuối? 'Chọn COLUMN1, --COLUMN2, Trường hợp Khi COLUMN1 = 'Something' và Len (column2) = 35 Then 'Something Else' + substring (--COLUMN2, 1, 35) \t ELSE COLUMN1 End như cột3 Từ dbo.xxx' – seanbun

2

Bạn cần phải có một giá trị cho mỗi WHEN, và nên có một ELSE:

Select Data_Source, CustomerID, 
    CASE 
    WHEN Data_Source = 'Test1' and Len(CustomerName) = 35 THEN 'First Value' 
    WHEN Data_Source = 'Test2' THEN substring(CustomerName, 1, 35) 
    ELSE 'Sorry, no match.' 
    END AS CustomerName 
    From dbo.xx 

FYI: Len() không trả lại một chuỗi.

EDIT: Một SQL Server câu trả lời mà giải quyết một số ý kiến ​​có thể là:

declare @DataSource as Table (Id Int Identity, CustomerName VarChar(64)) 
declare @VariantDataSource as Table (Id Int Identity, CostumerName VarChar(64)) 
insert into @DataSource (CustomerName) values ('Alice B.'), ('Bob C.'), ('Charles D.') 
insert into @VariantDataSource (CostumerName) values ('Blush'), ('Dye'), ('Pancake Base') 

select *, 
    -- Output the CostumerName padded or trimmed to the same length as CustomerName. NULLs are not handled gracefully. 
    Substring(CostumerName + Replicate('.', Len(CustomerName)), 1, Len(CustomerName)) as Clustermere, 
    -- Output the CostumerName padded or trimmed to the same length as CustomerName. NULLs in CustomerName are explicitly handled. 
    case 
    when CustomerName is NULL then '' 
    when Len(CustomerName) > Len(CostumerName) then Substring(CostumerName, 1, Len(CustomerName)) 
    else Substring(CostumerName + Replicate('.', Len(CustomerName)), 1, Len(CustomerName)) 
    end as 'Crustymore' 
    from @DataSource as DS inner join 
    @VariantDataSource as VDS on VDS.Id = DS.Id 
+0

Phần 'ELSE' không bắt buộc trong trường hợp Transact-SQL CASE (nếu đó là những gì bạn muốn bởi * nên *). –

+0

@AndriyM - Đó là đề xuất "phương pháp hay nhất". – HABO

+0

Tôi không cố gắng sử dụng nhiều WHEN trong tuyên bố của mình, mục đích là thao tác dữ liệu trong các bản ghi trong đó ID tương tự nhưng Nguồn dữ liệu (Cột1) là biến thể để độ dài được trả về giống nhau. Tất nhiên việc thêm ELSE là sách giáo khoa, nhưng không bị phân tâm từ những gì tôi đang cố gắng hoàn thành. Có ai biết tại sao tôi sẽ nhận được lỗi đó khi thêm '=' sau THEN của tôi? Hoặc một giải pháp cung cấp cho phép tôi sử dụng WHEN trong thời trang này. Bất kỳ đề xuất nào khác đều được đánh giá cao. – user1368436

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