Tsql 案例存在时,然后选择

Tsql 案例存在时,然后选择,tsql,sql-server-2000,Tsql,Sql Server 2000,我需要在case语句中从表中选择字段,而不是一些静态值 WHEN EXISTS(SELECT c.customer_name FROM Sales.Customer AS c WHERE c.PersonID = @BusinessEntityID) THEN c.customer_name 这是如何实现的,或者这是可能的。我从msdn网站上获取了以下内容。需要调整以满足我的要求 USE AdventureWorks2008R2; GO

我需要在case语句中从表中选择字段,而不是一些静态值

WHEN EXISTS(SELECT c.customer_name FROM Sales.Customer AS c 
            WHERE c.PersonID = @BusinessEntityID) 

           THEN c.customer_name  
这是如何实现的,或者这是可能的。我从msdn网站上获取了以下内容。需要调整以满足我的要求

USE AdventureWorks2008R2;
GO
CREATE FUNCTION dbo.GetContactInformation(@BusinessEntityID int)
RETURNS @retContactInformation TABLE 
(
BusinessEntityID int NOT NULL,
FirstName nvarchar(50) NULL,
LastName nvarchar(50) NULL,
ContactType nvarchar(50) NULL,
PRIMARY KEY CLUSTERED (BusinessEntityID ASC)
) 
AS 
-- Returns the first name, last name and contact type for the specified contact.
BEGIN
DECLARE 
    @FirstName nvarchar(50), 
    @LastName nvarchar(50), 
    @ContactType nvarchar(50);

-- Get common contact information
SELECT 
    @BusinessEntityID = BusinessEntityID, 
    @FirstName = FirstName, 
    @LastName = LastName
FROM Person.Person 
WHERE BusinessEntityID = @BusinessEntityID;

SET @ContactType = 
    CASE 
        -- Check for employee
        WHEN EXISTS(SELECT * FROM HumanResources.Employee AS e 
            WHERE e.BusinessEntityID = @BusinessEntityID) 
            THEN 'Employee'

        -- Check for vendor
        WHEN EXISTS(SELECT * FROM Person.BusinessEntityContact AS bec
            WHERE bec.BusinessEntityID = @BusinessEntityID) 
            THEN 'Vendor'

        -- Check for store
        WHEN EXISTS(SELECT * FROM Purchasing.Vendor AS v          
            WHERE v.BusinessEntityID = @BusinessEntityID) 
            THEN 'Store Contact'

        -- Check for individual consumer
        WHEN EXISTS(SELECT * FROM Sales.Customer AS c 
            WHERE c.PersonID = @BusinessEntityID) 
            THEN 'Consumer'
    END;

-- Return the information to the caller
IF @BusinessEntityID IS NOT NULL 
BEGIN
    INSERT @retContactInformation
    SELECT @BusinessEntityID, @FirstName, @LastName, @ContactType;
END;

RETURN;
END;
GO

不知道代码的其余部分是什么样子,但通常是:

SELECT name = COALESCE(c.customer_name, o.other_entity_name)
  FROM dbo.MainEntity AS m
  LEFT OUTER JOIN dbo.Customers  AS c ON m.something = c.something
  LEFT OUTER JOIN dbo.OtherTable AS o ON m.something = o.something;

但是,除了一般的想法之外,您还没有提供足够的信息来提供完整的答案。

当客户不存在时,您希望返回什么?没有空行?其他值?是否需要设置变量(如代码示例中的变量),或者您的案例语句是否在查询中?为什么需要猜测问题?同意上面的评论。也许丹尼洛知道你想要什么,但我绝对不知道。这个问题需要更多地解释你的需要。插入一些随机的MSDN代码片段并没有真正的帮助。我可以让这个查询工作。很抱歉,如果不清楚的话……简单的问题是,当您使用exists子句时,您可以访问exists子句中检索到的字段吗。答案是没有。你们几个下层选民也拿我的名誉出了4分,什么也没回答。-检查是否存在员工从人力资源中选择e.field1。员工身份为e,其中e.BusinessEntityID=@BusinessEntityID,则无法在此处访问field1--field1。我认为不需要了解此处给定示例之外的任何内容。但您的查询肯定会有所帮助,并提供另一种见解。谢谢