将所有Flags汇总到Oracle中的一行中

时间:2017-12-14 22:32:04

标签: sql oracle sas proc

我必须在每个成员记录的数据集中创建5个标志。现在最后的要求是对每个成员的所有标志求和。

例如,一个成员有 - Y,Y ,,, Y,即3个标志设置为Y.我需要将这些总和作为我在上一次创建的总和字段中的3。

我在Oracle(Proc SQL in SAS)

中这样做

请帮助别人!!

非常感谢..

5 个答案:

答案 0 :(得分:2)

  1. 使用CATX将所有内容合并为一个字段
  2. 使用COUNTC对它们进行全部计算。

     select countc(catx(', ', flag1, flag2, flag3, flag4, flag5), 'Y') as num_y
    

答案 1 :(得分:0)

一种方法使用{{1}}:

{{1}}

答案 2 :(得分:0)

连接5个标志,然后使用regexp_count()计算" Y" s。如果这是一个问题,以下内容也允许大写/小写。

select regexp_count(flag1||flag2||flag3||flag4||flag5,'[yY]')

Oracle 10g及以上

答案 3 :(得分:0)

我建议重新配置表格,为Y,N摄取1,0。如果可能的话。

如果没有,oracle有一个regexp_count。连接字段然后regexp_count。

答案 4 :(得分:0)

user9026530明确表示他正在使用SAS,这里是一个不涉及SAS功能的纯SQL解决方案:

WITH
    aset
    AS
        (SELECT 'Y' flag1
              , 'N' flag2
              , 'Y' flag3
              , 'Y' flag4
              , NULL flag5
           FROM DUAL)
SELECT aset.*, LENGTH (REGEXP_REPLACE (flag1 || flag2 || flag3 || flag4 || flag5, '[^Y]', NULL)) flag_count
  FROM aset


FLAG1 FLAG2 FLAG3 FLAG4 FLAG5 FLAG_COUNT
  Y     N     Y     Y           3