2014-08-28 69 views
1

我有一个SQL查询,看起来像这样的SELECT子句:如何引用的子查询在SQL语句中

DECLARE @I int 

SET @I = (SELECT W.PMon FROM WHouse.dbo.Rundate AS W) 

SELECT L.ACCOUNT, 
L.ID, 
L.OPENDATE, 
L.ORIGINALBALANCE, 
L.BALANCE, 
L.DUEDATE, 
(SELECT N.BIRTHDATE FROM Sym.dbo.NAME AS N WHERE N.Account = L.Account and N.ORDINAL = 0) AS 'PBD', 
(SELECT N.BIRTHDATE FROM Sym.dbo.LOANNAME AS N WHERE L.Account = N.Account and L.ID = N.PARENTID and N.TYPE IN (01, 16, 20, 21)) AS 'JBD', 
L.CREDITSCORE 

FROM Sym.dbo.Loan AS L 
JOIN Sym.dbo.Account AS A 
ON L.Account = A.Account 
WHERE L.TYPE IN (0, 1, 2, 3, 14, 15, 23) and L.BALANCE > 0 and L.CHARGEOFFDATE IS NULL and L.CLOSEDATE IS NULL and A.TYPE <> 5 

在WHERE子句中,我该如何引用子查询的SELECT子句中做比较?

回答

2

如果仅返回单个值,则只能将子查询直接放入select子句中。如果要在select子句和where子句中的表达式中的子查询中引用,则需要将子查询放置在具有别名...或作为连接表的子句中, On子句中的条件:

只需将子查询放入From子句中的连接中即可。

SELECT L.ACCOUNT, L.ID,L.OPENDATE, 
    L.ORIGINALBALANCE, L.BALANCE, 
    L.DUEDATE, L.CREDITSCORE, 
    pbd.Birthdate PBDBirthdate, 
    jbd.Birthdate JBDBirthdate 
FROM Sym.dbo.Loan AS L 
    JOIN Sym.dbo.Account AS A 
     ON A.Account = L.Account 
    Join Sym.dbo.NAME pbd 
     On pbd.Account = L.Account 
     and pbd.ORDINAL = 0 
    Join Sym.dbo.LOANNAME jbd 
     On jbd.Account = L.Account 
     and jbd.PARENTID = L.ID 
     and jbd.TYPE IN (01, 16, 20, 21)  
WHERE L.TYPE IN (0, 1, 2, 3, 14, 15, 23) 
    and L.BALANCE > 0 
    and L.CHARGEOFFDATE IS NULL 

现在你可以使用别名PBF和/或JBD SELECT子句中引用这两个表中的列表达式,你可能需要

任何方式