首页 > 解决方案 > 查找具有重复列但由具有指定值的一列不同的行

问题描述

我有这个数据:

ID  PERSNR  YEARNR  MONTHNR DAYNR   ABSTIME ABSID   ABSCALC TypeLine
---------------------------------------------------------------------
 1  26      2018    12      3       480     3       11      0
 2  26      2018    12      3       480     3       11      1
 5  26      2018    10      1        60     1       31      0
 8  26      2018    10      3        60     1       31      0
13  69      2018    12      3       480     3       11      0
14  69      2018    12      3       480     3       11      1
19  69      2018     9      3        60     3       31      1
22  69      2018     9      3        60     3       31      0
23  69      2018     9      3       420    21       11      0
26  69      2018     9      6       120    21       31      1
29  69      2018     9     10       120    21       31      1
32  69      2018     9      4       480    21       11      1

我需要确定以下情况:

  1. TypeLine 为 0 和 1 结果 ID 的行:1 和 2;13 和 14、19 和 22

  2. 只有 TypeLine 的行只有 0 结果 ID:5;8个;23

  3. 只有 TypeLine 的行只有 1 个结果 ID:26、29、32

我不确定要创建这 3 个脚本,也找不到解决方案。

请你帮助我好吗?

标签: sqlsql-server

解决方案


这是做你想做的吗?

select (case when cnt_type_0 > 0 and cnt_type_1 > 0
             then 'Condition 1'
             when cnt_type_1 = 0
             then 'Condition 2'
             when cnt_type_0 = 0
             then 'Condition 3'
        end) as condition,
       t.*
from (select t.*,
             count(*) over (partition by ID, PERSNR, YEARNR, MONTHNR, DAYNR, ABSTIME, ABSID, ABSCALC) as cnt,
             sum(case when TypeLine = 0 then 1 else 0 end) over (partition by ID, PERSNR, YEARNR, MONTHNR, DAYNR, ABSTIME, ABSID, ABSCALC) as cnt_type_0,             
             sum(case when TypeLine = 1 then 1 else 0 end) over (partition by ID, PERSNR, YEARNR, MONTHNR, DAYNR, ABSTIME, ABSID, ABSCALC) as cnt_type_1
       from t
      ) t
where cnt >= 2;

您可以将条件添加到WHERE子句中以获取仅一种类型的行。


推荐阅读