假設我有一個帶有 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 是否也列在第二個表中,向上述視圖添加一個 true 或 false 屬性,這表明該訂單已被取消。那應該看起來像這樣:
Select CommissionNumber, CreationDate, IsCancelled as (case....
FROM dbo.MyOrders
我的語法不正確。有誰能夠幫助我?
uj5u.com熱心網友回復:
您可以使用外部聯接,然后檢查聯接表上的主鍵是否具有指示是否找到聯接的值。如果表中的多個記錄上可以存在相同的值,則您可能會得到重復的記錄。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
uj5u.com熱心網友回復:
一個簡單的Exists查詢應該可以解決問題:
SELECT
CommissionNumber,
CreationDate,
CASE
WHEN Exists
(
SELECT 1
FROM dbo.CanceledOrders As C
WHERE C.CommissionNumber = O.CommissionNumber
) THEN CAST(1 As bit)
ELSE CAST(0 As bit)
END As IsCancelled
FROM
dbo.MyOrders As O
存在 (Transact-SQL)
uj5u.com熱心網友回復:
我會像這樣使用外部應用:
CREATE View [dbo].[Test]
As
Select O.CommissionNumber, O.CreationDate, Case When C.CommissionNumber Is Not Null Then 1 Else 0 End IsCancelled
FROM dbo.MyOrders As O Outer Apply (Select Top 1 CommissionNumber From [dbo].[CanceledOrders] Where CommissionNumber=O.CommissionNumber) As C
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/347371.html
標籤:sql-server
