【发布时间】:2011-11-22 06:32:34
【问题描述】:
我需要在 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
【问题讨论】:
-
当客户不存在时你想返回什么?没有行NULL?其他价值?
-
您需要设置一个变量,如代码示例中那样,还是您的 CASE 语句在查询中?
-
为什么我们需要猜这个问题?
-
同意上面的评论。也许达尼洛明白你想要什么,但我绝对不明白。这个问题需要更多地解释您的需求。随意输入一些 MSDN 代码 sn-p 并没有真正的帮助。
-
我可以使这个查询工作。抱歉,如果不清楚...简单的问题是,当您将 CASE 与 exists 子句一起使用时,您是否可以访问在 exists 子句后 then 子句中检索到的字段。答案是不。你们几个downvoters 太我的声誉 4 点,并没有回答任何问题。 -- 检查员工 WHEN EXISTS(SELECT e.field1 FROM HumanResources.Employee AS e WHERE e.BusinessEntityID = @BusinessEntityID) THEN field1 ----field1 不能在此处访问。
标签: tsql sql-server-2000