我试图CASE在SQL Select语句中使用,这将允许我得到结果,我可以利用一个字符串的长度来产生另一个字符串的resutls.这些是针对共享公共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
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到以下错误:
消息102,级别15,状态1,行5'='附近的语法不正确.
您需要为 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
Run Code Online (Sandbox Code Playgroud)
仅供参考: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
Run Code Online (Sandbox Code Playgroud)
Select
Column1,
Column2,
Case
When Column1 = 'Something' and Len(Column2) = 35
Then 'Something Else' + substring(Column2, 1, 35)
End as Column3
From dbo.xxx
Run Code Online (Sandbox Code Playgroud)
更新您的查询
希望这有帮助。
| 归档时间: |
|
| 查看次数: |
25731 次 |
| 最近记录: |