7

我正在尝试CASE在 SQL Select 语句中使用,该语句将允许我获得可以利用一个字符串的长度来生成另一个字符串的结果的结果。这些用于来自两个数据集的不匹配记录,这些数据集共享一个公共 ID,但数据源不同。

案例陈述如下:

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

当我运行它时,我收到以下错误:

消息 102,级别 15,状态 1,第 5 行 '=' 附近的语法不正确。

4

2 回答 2

10

您需要为 each 设置一个值WHEN,并且应该有一个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

仅供参考:Len()不返回字符串。

编辑: 解决一些评论的 SQL Server 答案可能是:

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
于 2012-05-02T02:52:34.573 回答
2
Select 
    Column1, 
    Column2, 
    Case 
      When Column1 = 'Something' and Len(Column2) = 35 
      Then 'Something Else' + substring(Column2, 1, 35) 
    End as Column3 
From dbo.xxx

更新您的查询

  1. 使用 '+' 进行字符串连接
  2. len() 返回 int,不需要使用 ''
  3. 在条件时删除“Column1 =”
  4. 用。。。来代替 ''

希望这有帮助。

于 2012-05-01T23:54:09.123 回答