【发布时间】:2022-11-11 17:52:21
【问题描述】:
我有一张来自调查的大表,其中所有答案都相似,但我需要使它们保持一致。我需要为所有列重用相同的 case 语句,但这会导致查询非常丑陋且冗长。有没有办法将案例变成存储过程、UDF 或我可以更改被调用列的东西?
例子:
-- Example Case statement I need for all Columns
CASE
WHEN Happy IN ('Yes','True','Y','1') THEN 'Yes'
WHEN Happy IN ('No','False','N','0') THEN 'No'
WHEN Happy LIKE 'Don_t Know' or Happy IN ('Unknown','U','999','-1') THEN 'Unknown'
WHEN Happy IN ('Missing','Blank','-4') THEN 'Missing'
END AS HappyClean
-- Example table
SELECT Happy
,Sad
,DownBad
,FeelinGood
From Emotions
列的实际数量超过 50,而 Case 实际上长了 2 行,因此您可以看到如果我必须为每一列复制粘贴该代码,代码会多长时间。我正在使用 SQL Server 顺便说一句。
感谢任何帮助!
【问题讨论】:
-
您当然可以将其封装在一个函数中并将该列作为参数传递。
-
那是
CASE表达,而不是陈述。至于问题,虽然你可以创建一个函数(可能是一个在 2019+ 年可内联的标量函数),这样的方法在 SQL 中不能很好地扩展。 T-SQL 中的划分逻辑通常会阻碍效率,而不是提高效率。经常重复逻辑实际上更高效。 -
也许,你真的应该有一个名为
Feeling的列,然后是另一个列用于true/false/etc。那么你只需要 1 个CASE表达式,而不是 50 个。当你需要多次重复一个表达式时,这样的要求通常表明存在设计缺陷。 -
您可以一次性支付价格以某种方式修复您的数据,方法是保持一致,然后在所有查询中使用“固定”数据。或者,您可以为每个查询付出代价。你选。
标签: sql sql-server case user-defined-functions