【问题标题】:How to check if the row of the first column is greater than the second in sql (Using IF Statement)如何在sql中检查第一列的行是否大于第二列(使用IF语句)
【发布时间】:2018-06-21 11:27:32
【问题描述】:

我写了一个查询来创建一个包含一列的表

CREATE TABLE ORDER( 
   Order_Date DATE NOT NULL
)

我在列中插入了两个值

--Order_Date--
2018-05-21
2018-01-21

如何用IF语句判断第一行是大于还是小于第二行?

【问题讨论】:

  • 要使用if进行比较,您应该将值存储在变量中并像这样比较IF @firstDate > @secondDate
  • 如何获取每一行的值,请告诉我?我不知道如何在触发器中做到这一点
  • 您是否尝试在触发器中执行此操作?知道最后插入的两三个记录不是不可能的,你只能知道最后一个。我建议您包含一个标识列,以便使用 order by 子句获取最后插入的行

标签: sql ssms-2017


【解决方案1】:

SQL 表代表无序 集合。表格中没有“第一”行或“第二”行。

如果你包含一个标识列,你可以做你想做的事:

CREATE TABLE ORDERS ( 
   OrderId IDENTITY(1, 1) PRIMARY KEY,
   Order_Date DATE NOT NULL
);

现在,您可以查看OrderId 和OrderDate 的顺序是否相同。比如:

select (case when max(case when seqnum = 1 then order_date end) >
                  max(case when seqnum = 2 then order_date end)
             then 'greater than'
             when max(case when seqnum = 1 then order_date end) =
                  max(case when seqnum = 2 then order_date end)
             then 'equal'
             when max(case when seqnum = 1 then order_date end) <
                  max(case when seqnum = 2 then order_date end)
             then 'less than'
        end) as comparison
from (select o.*, row_number() over (order by OrderId) as seqnum
      from orders o
     ) o;

请注意,我还将表重命名为 Orders。 Order 是一个非常糟糕的表名称,因为它是一个 SQL 关键字和一个保留字。

【讨论】:

  • 我在笔记本电脑上尝试过您的查询,但无法正常工作,请您向我展示您的查询输出
  • 我的 SSMS 返回错误“关键字 'then' 附近的语法不正确”。问题可能是因为我不知道如何操作您的查询
  • @IsraelObanijesu 。 . .这些表达式中应该有一个case。
  • 您的查询正在运行,但我如何使用它来管理一系列 ID。有人可以自动检查 ID 而无需手动声明吗??
  • @IsraelObanijesu 。 . .据我所知,这个答案回答了这个问题。如果您还有其他问题,请将其作为问题提出。包括样本数据、期望的结果以及您想要完成的任务的说明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 2020-01-09
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
相关资源
最近更新 更多