如何使以下T-SQL语句合法?我可以复制为每个CASE选项设置@Type变量的子查询,但我宁愿只执行一次子查询。可能吗?在设置它的相同SELECT语句中使用SQL变量进行比较
SELECT
@Type = (SELECT CustomerType FROM dbo.Customers WHERE CustomerId = (SELECT CustomerId FROM dbo.CustomerCategories WHERE CatId= @CatId)),
CASE
WHEN @Type = 'Consumer'THEN dbo.Products.FriendlyName
WHEN @Type = 'Company' THEN dbo.Products.BusinessName
WHEN @Type IS NULL THEN dbo.Products.FriendlyName
WHEN @Type = '' THEN dbo.Products.FriendlyName
END Product,
...
FROM
Products
INNER JOIN
Category
...
编辑:修改我的例子更具体的......现在得跑......会回来的明天...签署过短的遗憾,但不得不拿起孩子:d将检查明天回来。谢谢!!
澄清:我不能分开这两个:在子查询的where-clasue中,我需要引用表中的主要查询的join stmt中使用的列。如果我将它们分开,那么@Type将失去相关性。
你需要更具体的一部分。 – 2012-04-24 19:53:20
你仍然太模糊。请告诉我们你需要做什么,而不是告诉我们你认为你需要做什么。我认为这里有一个关于查询和变量如何工作的根本缺失的链接,但是如果您向我们展示示例数据和期望的结果,那么我们是非常聪明的人,并且可能想出如何实现您所追求的内容。 – 2012-04-24 20:03:22
如果您指定您正在使用的SQL Server的版本,这也很有用! – 2012-04-24 20:07:39