在SQL的同一列中将单元格1与单元格2进行比较

时间:2019-07-03 21:58:33

标签: sql sql-server

在SQL中,我需要一些帮助。 我有这样的查询

select sub.*
from(
    select 
        distinct columnA,   
        case
            when length ("columnA") > 16 then 'Org_ID'
            when length ("columnA") <= 16 then 'non_Org_ID'
        end as ColumnC,
        columnB,    
        "ColumnD"
    from Table1
    where "ColumnD"::date = '2018-08-31 00:00:00'::date
    UNION
    select 
        distinct columnA,   
        case
            when length ("columnA") > 16 then 'Org_ID'
            when length ("columnA") <= 16 then 'non_Org_ID'
        end as ColumnC,
        columnB,    
        "ColumnD"
    from Table1
    where "ColumnD"::date = '2019-07-01 00:00:00'::date
    ) sub
order by sub.columnC

                 Result
   Column A  Column B  Column C  Column D  
       1                  a 
       1                  a
       2                  b
       3                  b
       4                  c
       4                  d

现在要得到结果,我需要应用这样的逻辑。如果在C列中的单元格1等于单元格2,并且在A列中的单元格1等于单元格2,则“ True”,否则为“ false”,然后移至下一个单元格。所需的结果是这样的

 Column A  Column B  Column C  Column D  Column E
       1                  a                True
       1                  a                (blanks)
       2                  b                False 
       3                  b                (blanks)
       4                  c                True
       4                  d                (blanks)     

空白不是100%必需的。

谢谢

2 个答案:

答案 0 :(得分:1)

当值都相同时,您似乎希望使用true,否则要使用false。使用窗口功能:

select t.*,
       (case when min(a) over (partition by b) = max(a) over (partition by b)
             then 'true' else 'false'
        end) as flag
from t;

Here是db <>小提琴,表明它可以正常工作。

答案 1 :(得分:1)

您可以group by columna, columnb获取相同的行并联接到表:

select t.*,
  case g.counter when 1 then 'False' else 'True' end columnc 
from tablename t inner join (
  select columna, columnb, count(*) counter
  from tablename 
  group by columna, columnb  
)g on g.columna = t.columna and g.columnb = t.columnb

请参见demo
结果:

> columna | columnb | columnc
> ------: | :------ | :------
>       1 | a       | True   
>       1 | a       | True   
>       2 | b       | False  
>       3 | b       | False  
>       4 | c       | True   
>       4 | c       | True