sql一个段有很多方法但是所有这些方法都应该有一个日期,如何检查那些没有的方法

时间:2016-04-20 12:13:07

标签: sql sas

我的表格如下:

method   year    segment     
ABC      2014    AB
CAB      2014    AB
PAU      2013    AB
COR      2015    CD
PRK      2016    IK

所有细分受众群都应该是同一年。所以我需要确定其中有多少年份不同。这是一个错误。

结果应为

method   year    segment 
PAU      2013    AB

  

错误= 1

你能帮我解决一下代码吗? 到目前为止,我尝试过这样的事情,但它给了我完整的清单:

create table E1 as 
    select segment, dat_start
    from pd_segment a
    where a.segment in (select b.segment from pd_segment b
                        group by b.segment
                        having count (b.dat_start NE a.dat_start-1))

4 个答案:

答案 0 :(得分:0)

我怀疑你正在使用SAS并想要这个:

create table E1 as 
        select segment, dat_start
        from pd_segment a
        where a.segment in (select b.segment
                            from pd_segment b
                            group by b.segment
                            having min(b.dat_start) <> max(b.dat_start)
                           );

在SQL(和proc SQL)中,“not equal”通常拼写为<>

答案 1 :(得分:0)

让我们说我们的桌名是&#34; MyTable&#34;

此查询将报告超过1年的细分:

select distinct segment from MyTable
Group by segment
having count(distinct year)>1

然后,如果您想要所有其他列数据,您可以将此结果与表本身

连接
select Mytable.* from MyTable join (
select distinct segment from MyTable
Group by segment
having count(distinct year)>1
) as x on x.segment=Mytable.segment

答案 2 :(得分:0)

试试这个

SELECT *
FROM    (
    SELECT *,ROW_NUMBER() OVER(PARTITION BY [YEAR] 
        ORDER BY SEGMENT DESC) ROW_NO FROM @TABLE1
    ) T WHERE row_no <> 1

答案 3 :(得分:0)

如果你没有很多片段,而你所需要的只是片段年份不正确的方法,那么下面的简单查询可以解决这个问题:

SELECT
  *
FROM pd_segment
WHERE
   (dat_start NOT LIKE 2014 AND segment LIKE 'AB')
   OR (dat_start NOT LIKE 2015 AND segment LIKE 'CD')
   OR (dat_start NOT LIKE 2016 AND segment LIKE 'IK')

编辑:添加结果

method  dat_start   segment
PAU     2013        AB