选择IF EXISTS作为BIT列

时间:2016-08-04 17:48:52

标签: sql tsql select join

我的查询目前看起来像这样:

 SELECT
     d.Region_Name
    , d.Dealer_Name
    , RIGHT(r.Vin,8) AS VIN
FROM 
    tblCCDealerCall_Customer c
    JOIN tblCCDealerCall d ON c.DealerID = d.DealerID
    JOIN tblReservation_TestDrive r ON r.CustomerID = c.CustomerID

很简单。但是,现在我想添加一个名为IsVinActive的第四列,这是一个BIT。我需要检查另一个表tblVinDisabledDate,以查看该表中是否存在当前的VIN。

我可以使用此查询来查看该表中是否存在VIN:

SELECT CASE WHEN EXISTS 
(
    SELECT 1 FROM tblVinDisabledDate vd WHERE vd.Vin = '2LMPJ6LP5GBL54709'
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT) END

但我不确定将其整合到第一个查询中的最佳方法。

谢谢!

2 个答案:

答案 0 :(得分:1)

你快到了。试试这个。

SELECT
     d.Region_Name
    , d.Dealer_Name
    , RIGHT(r.Vin,8) AS VIN
    , CASE WHEN EXISTS (SELECT 1 FROM tblVinDisabledDate WHERE Vin = r.Vin)
      THEN CAST(1 AS BIT)
      ELSE CAST(0 AS BIT) END
FROM tblCCDealerCall_Customer c
JOIN tblCCDealerCall d ON c.DealerID = d.DealerID
JOIN tblReservation_TestDrive r ON r.CustomerID = c.CustomerID

如果您想避免相关查询,也可以join另一个表。

SELECT
      d.Region_Name
    , d.Dealer_Name
    , RIGHT(r.Vin,8) AS VIN
    , CASE WHEN vd.vin is not null then CAST(1 AS BIT) ELSE CAST(0 AS BIT) END 
FROM tblCCDealerCall_Customer c
JOIN tblCCDealerCall d ON c.DealerID = d.DealerID
JOIN tblReservation_TestDrive r ON r.CustomerID = c.CustomerID
LEFT JOIN tblVinDisabledDate vd ON vd.Vin = r.Vin

答案 1 :(得分:0)

;With cte
as
(
SELECT
     d.Region_Name
    , d.Dealer_Name
    , RIGHT(r.Vin,8) AS VIN
FROM 
    tblCCDealerCall_Customer c
    JOIN tblCCDealerCall d ON c.DealerID = d.DealerID
    JOIN tblReservation_TestDrive r ON r.CustomerID = c.CustomerID
)
select * ,case when b.vin is null then 0 else 1 end as 'somecol 
from cte c
outer apply
(select 1  as vin from tblVinDisabledDate vd where vd.vin=c.vin) b