如何从表b中检索多个列

时间:2013-08-08 20:45:53

标签: sql

我有桌子A

conipk    contittle concycle  ttlid

122786  108405  S13 107552    
122787  108405  S13 107552    
122788  108405  S13 107552    
122789  108405  S13 107552   

表b

conipk    contype    concile   conamt
122786    LU     N         5.000
122786    LU         N         7.000
122787    LU     N         1.000
122788    LU     N         3.000
122788    LU         N         1.000
122789    LU     N         1.000

我想要3列和表B中的第一条记录。

所需的结果是

conipk    contittle concycle  ttlid   contype concile conanmt

122786  108405    S13       107552    LU     N    5
122787  108405    S13       107552    LU     N    1
122788  108405    S13       107552    LU     N    3
122789  108405    S13       107552    LU     N    1

我做了查询

SELECT      
   rc.contype, rc.concile, rc.conamtt, c.conipk, c.concycle, c.ttlid
FROM
   Contract c  
LEFT JOIN
   (SELECT TOP 1 
        r.conipk, r.contype, r.concile, r.conamt 
    FROM
        rules r 
    JOIN  
        contract c2 ON r.conipk = c2.conipk) AS rc ON rc.conipk = c.conipk 

但我刚拿到第一张唱片。

提前致谢

1 个答案:

答案 0 :(得分:0)

问题是你只是加入了B中的一条记录,而不是一条记录每个键

由于您没有说明您正在使用哪种服务器软件,因此难以提出明确的答案,但这将在SQL Server 2005及更高版本中有效(前提是您提供正确的顺序来确定“第一”记录):

SELECT      
    rc.contype, 
    rc.concile,
    rc.conamtt,
    c.conipk,
    c.concycle,
    c.ttlid
FROM contract c  
LEFT JOIN  ( 
    SELECT 
        ROW_NUMBER() OVER (PARTITION BY r.conipk ORDER BY ???) RowNUm,
        r.conipk,
        r.contype,
        r.concile,
        r.conamt 
        from rules r 
        join contract c2 on r.conipk = c2.conipk ) AS rc  
    on  c.conipk = rc.conipk
        AND rc.RowNum = 1