首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Proc Sql大小写混淆

Proc Sql大小写混淆
EN

Stack Overflow用户
提问于 2013-06-03 23:30:20
回答 3查看 1.5K关注 0票数 0

在SAS中

我有一个proc-sql步骤,用来创建宏变量来执行一些列表处理。

我遇到了一个令人困惑的步骤,使用case语句而不是where语句会导致结果数据集的第一行是空字符串('')

这两个表中的任何一个字段中都没有包含空字符串。

以下是两个示例SQL步骤,为了简单起见,去掉了所有的宏业务:

代码语言:javascript
运行
复制
    create table test as
    select distinct 
                case 
                    when brand in (select distinct core_brand from new_tv.core_noncore_brands) then brand
                end as brand1
    from new_tv.new_tv2
    ;

    create table test2 as
    select distinct brand
    from new_tv.new_tv2
    where brand in (select distinct core_brand from new_tv.core_noncore_brands)
    ; 

使用第一段代码,结果是一个包含多行的表,第一行是一个空字符串。

第二段代码按预期工作

这有什么原因吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-03 23:43:42

所以不同的是,如果没有WHERE子句,你不会限制你选择的内容,IE会考虑每一行。CASE语句可以根据条件存储项,但不会因为存储桶不能捕获所有内容而丢失结果,因此结果为NULL。WHERE限制返回的项。

票数 4
EN

Stack Overflow用户

发布于 2013-06-03 23:36:48

是的,第一个在case语句中没有then子句。令我惊讶的是,它甚至可以解析。在很多SQL方言中都不会这样。

你的意思大概是:

代码语言:javascript
运行
复制
create table test as
select distinct 
            case 
                when brand in (select distinct core_brand from new_tv.core_noncore_brands) 
                then brand
            end as brand1
from new_tv.new_tv2
;

您得到NULL的原因是,对于不匹配的品牌,case语句是返回NULL。您需要添加:

代码语言:javascript
运行
复制
where brand1 is not NULL

为了防止这种情况(使用子查询或使brand1成为计算字段)。

票数 0
EN

Stack Overflow用户

发布于 2013-06-03 23:39:45

您的第一个查询不正确,'case‘子句中没有'then’语句。

代码语言:javascript
运行
复制
create table test as
    select distinct 
                case 
                    when brand in (select distinct core_brand from new_tv.core_noncore_brands) 

*then value*                
end as brand1
    from new_tv.new_tv2
    ;

您可能会有空值,因为'case‘子句没有默认值,所以对于不满足条件的值,它返回NULL。“case”子句和“not IN”子句是不同的,第一个子句返回所有行,但不返回不满足条件的值,而第二个查询只返回满足条件的行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16900404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档