基于返回的行运行子查询

时间:2013-05-29 18:14:54

标签: sql-server subquery

我目前正在运行查询:

select table1.columnA as Barrier_1,
       table2.columnB as Action_1,
  from table2
  join table1 on table2.PrimKey = table1.PrimKey
 where table1.columnA is not null
   and table2.columnB is not null
 group by table1.columnA, table2.columnB
 order by table1.columnA

返回表格:

Barrier_1   Action_1
____________________
   01     |    01
   01     |    02
   02     |    01
   02     |    03
   02     |    04
   03     |    02
   03     |    03
   04     |    01
   05     |    04

我还要运行子查询,我不知道该怎么做。我需要利用屏障代码和动作代码从另一个表(tableC)获取唯一值。因此,对于我在上面显示的每一行,将会有另一个名为“Desc”的字段从tableC返回:

Barrier_1   Action_1    Desc
______________________________
   01     |    01    |   15
   01     |    02    |   21
   02     |    01    |   17
   02     |    03    |   12
   02     |    04    |   19
   03     |    02    |   26
   03     |    03    |   13
   04     |    01    |   22
   05     |    04    |   14

1 个答案:

答案 0 :(得分:1)

您将屏障/操作查询的结果加入到包含desc字段的表中。

基本上您可以选择两种语法选项。

您可以将屏障/操作查询放在底部,您可以将其视为“嵌套查询”,以下是使用AdventureWorks示例数据库的嵌套查询示例。

SELECT  C.ContactID
       ,C.EmployeeID
       ,D.[AddressID]
FROM    [HumanResources].[EmployeeAddress] D
INNER JOIN ( SELECT A.[ContactID]
                   ,B.EmployeeID
             FROM   [Person].[Contact] A
             INNER JOIN [HumanResources].[Employee] B
             ON     A.[ContactID] = B.[ContactID] ) C
ON      C.EmployeeID = D.EmployeeID;

或者你把障碍/动作查询放在最顶层,在所谓的'公用表表达式'中,这个语法风格的前一个样本看起来像这样:

WITH T1 ( ContactID, EmployeeID )
      AS ( SELECT   A.[ContactID]
                   ,B.EmployeeID
           FROM     [Person].[Contact] A
           INNER JOIN [HumanResources].[Employee] B
           ON       A.[ContactID] = B.[ContactID])
SELECT  T1.ContactID
       ,T1.EmployeeID
       ,T2.AddressID
FROM    T1
INNER JOIN [HumanResources].[EmployeeAddress] T2
ON      T1.EmployeeID = T2.EmployeeID;