【问题标题】:How to check if a record exists for the same date in SQL?如何检查SQL中是否存在同一日期的记录?
【发布时间】:2018-08-17 12:20:03
【问题描述】:

我想检查同一帐户和同一日期的同一表中是否存在记录。这是我认为使用它的案例陈述

CREATE VIEW TEST AS
    SELECT 
    T1.DATE,
    T1.ACTNBR,
    CASE WHEN EXISTS (SELECT COLUMN1 FROM TABLE T2 WHERE T2.ACTNBR = T1.ACTNBR AND T2.DATE = T1.DATE)
         THEN calculation1
         ELSE calculation2
    END CAL_COLUMN

    FROM TABLE T1 

当这个 CASE 返回 boolean 时,我希望计算 1 执行否则计算 2 应该执行。

看起来上面的 CASE WHEN EXISTS 语句将检查表中的所有日期和所有帐户编号,而不是检查该特定行日期和帐号。 我们能否启动一个变量(在执行 select 语句之前)并存储该记录的检查日期并为每一行重新初始化。

【问题讨论】:

  • 您的视图似乎符合您的预期。你能提供样本数据和期望的结果吗?
  • 欢迎来到 SO!请阅读how to provide a minimal, complete and verifiable example,它会重现您的问题。
  • 您是否试图通过最小化内部选择的执行次数来优化这一点?或者您想对表进行一次性更新以将计算结果存储在该表中?
  • @Ram 您的观察似乎是错误的,存在将在 T1 中的每行执行。
  • @Fact 是的,你是对的。我认为内部查询将匹配外部查询中的所有日期。我们后来注意到了这一点。我在sql中处于初级水平。

标签: sql sql-server-2012 case sql-view case-when


【解决方案1】:

不确定以下是否有帮助:

create table tttt(dt date, actnbr int);
 insert into tttt values('2018-01-01', '1'); 
 insert into tttt values('2018-01-01', '1'); 
 insert into tttt values('2018-01-01', '1'); 
 insert into tttt values('2018-01-01', '3');


 SELECT 
  T1.dt,
  T1.ACTNBR,
   sum(1) over(partition by T1.ACTNBR, T1.dt order by T1.dt) as RecordsCount   
   FROM  tttt t1
  ;

 2018-01-01,1,3
 2018-01-01,1,3
 2018-01-01,1,3
 2018-01-01,3,1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多