从子选择中提供值,然后在查询中重新输入

时间:2011-08-03 16:08:18

标签: sql sql-server

我的dbo.Report表有一个名为名称的列。我需要以某种方式选择子选择中的Name列。如何从子选择中获取Name值?一旦我有了那些我需要能够运行另一个选择查询,如:

SELECT * FROM MyOtherTable WHERE Name = @pName

其中@pName是一个新创建的变量,可能包含子选择的值?我不确定这是怎么回事。或类似的东西:

SELECT * FROM MyOtherTable WHERE Name IN (the values from my sub select go here)

PROC:

SELECT        ListingInfo, 
              COALESCE((SELECT SUM(ListingViews) 
              FROM dbo.Report
              WHERE (ID = @pID) 
              AND (DateEntered BETWEEN DATEADD(MONTH, 0, @pFromDate) AND DATEADD(MONTH, 1, @pToDate)-1)
              GROUP BY ID), 0) AS 'Views'
FROM dbo.Reporting r
INNER JOIN dbo.Listings l ON (r.ID = l.ID)
WHERE (r.ID = @pID)
AND l.TypeCode = 20

2 个答案:

答案 0 :(得分:2)

您可以使用表变量来存储您的姓名。

DECLARE @Names TABLE
(
  Name varchar(250),
  SomeInt int
)

INSERT INTO @Names (Name, SomeInt)
SELECT Name, sum(ListingViews)
FROM WhateverTable
GROUP BY Name

SELECT * FROM OtherTable WHERE Name IN (SELECT Name FROM @Names)

您可以继续使用@Names,就好像它是任何其他表一样,如果您在存储过程中使用它,它将在结束时自动处理表变量的清理。

答案 1 :(得分:0)

这样的东西? 或者你还需要什么? 完全没理解,抱歉。

SELECT * 
FROM MyOtherTable 
WHERE Name IN (SELECT name FROM Table WHERE Name = @pName)

修改 像这样的东西?

 SELECT COUNT(*), name
 FROM MyOtherTable O,  Table T
 WHERE O.Name = T.NAME
 AND T.NAME = @pName
 group by name