首页 > 解决方案 > 根据另一个属性是否在列表中,将属性添加到视图

问题描述

假设我有一个 CommissionNumber 和 CreationDate 的视图:

Select CommissionNumber, CreationDate
FROM dbo.MyOrders

CommissionNumber 只是一个大小为 12 的 varchar。

还有另一个表(让我们命名dbo.CanceledOrders),其中包含最近取消的订单的 CommissionNumbers:

CREATE TABLE [dbo].[CanceledOrders] (
    [PK_ID] [int] IDENTITY(1,1) NOT NULL,
    [FK_VehicleFile] [int] NOT NULL,
    [CommissionNumber] [nvarchar](15) NULL,
    [CancelingUser] [nvarchar](50) NULL,
    [CancelationDate] [date] NULL,
    [ValidatingUser] [nvarchar](50) NULL,
    [ValidationDate] [date] NULL,
    [ReasonForCancelation] [nvarchar](500) NULL);

我想根据视图的commissionNumber 是否也列在第二个表中,向上面的视图添加一个属性,该属性是真还是假,这表明该订单已被取消。这应该看起来像这样:

 Select CommissionNumber, CreationDate, IsCancelled as (case....
    FROM dbo.MyOrders

我无法正确使用语法。有谁能够帮我?

标签: sql-server

解决方案


您可以使用外部联接,然后检查联接表上的主键是否具有指示是否找到联接的值。如果表中的多条记录上可以存在相同的值,您可能会得到重复的记录。CommissionNumberCanceledOrders

Select o.CommissionNumber, o.CreationDate, IIF(c.PK_ID IS NULL, 0, 1) AS IsCancelled
FROM dbo.MyOrders o LEFT OUTER JOIN dbo.CanceledOrders c ON o.CommissionNumber = c.CommissionNumber

推荐阅读