连接表中相应值的SQL语句

连接表中相应值的SQL语句,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,因此,我有一个名为tbl1的表,它看起来像但有更多的行: CUSIP_ID1 CUSIP_ID2 cor dt_pnts 921910709 06738G407 0.99613 252 739371102 06738G407 0.380706 213 808524654 06738G407 0.580574 221 78467V202 0673

因此,我有一个名为tbl1的表,它看起来像但有更多的行:

        CUSIP_ID1   CUSIP_ID2   cor        dt_pnts  
        921910709   06738G407   0.99613     252
        739371102   06738G407   0.380706    213
        808524654   06738G407   0.580574    221
        78467V202   06738G407   0.366938    224
        808524854   06738G407   0.0127264   232
        78567V103   06738G407   0.0799898   198
等等

我的代码是第二个表tbl2,它有一个我用来匹配值的ID

insert into tbl3 (Ticker, cusip_id, maxcor) 
select b.ID, a.CUSIP_ID1 No_indx_cusip, MAX(abs(a.cor)) maxcor
from  tbl1 a, tbl2 b
where a.CUSIP_ID1 = b.CUSIP_ID
group by a.CUSIP_ID1, b.Ticker
order by maxcor desc
select * from tbl3
返回

    Ticker No_Indx_cusip maxcor  dt_pnts
    EDV     921910709   0.99613  NULL
    SCHR    808524854   0.989976 NULL
    VGIT    92206C706   0.988307 NULL
    ELD     97717X867   0.985073 NULL
    PDP     73935X153   0.979131 NULL
    TTFS    00768Y818   0.974691 NULL
    SCHO    808524862   0.974254 NULL
    RLY     78467V103   0.951472 NULL
    PXLG    739371102   0.937278 NULL
    VCIT    92206C870   0.934389 NULL
    INKM    78467V202   0.921616 NULL
    WDTI    97717W125   0.890677 NULL
    CEW     97717W133   0.847838 NULL
我想从tbl1中选择与maxabsa.cor值匹配的对应dt_pnts,从tbl1中选择tbl3,因为某种原因,tbl1不适用于我,即0.99613的值对应于252的dt_pnts值。谢谢

结果看起来像

Ticker No_Indx_cusip maxcor  dt_pnts
    EDV     921910709   0.99613  252
    SCHR    808524854   0.989976 124
    VGIT    92206C706   0.988307 252
    ELD     97717X867   0.985073 79
    PDP     73935X153   0.979131 89
    TTFS    00768Y818   0.974691 252
    SCHO    808524862   0.974254 198
    RLY     78467V103   0.951472 38
    PXLG    739371102   0.937278 138
    VCIT    92206C870   0.934389 212
    INKM    78467V202   0.921616 90
    WDTI    97717W125   0.890677 16
    CEW     97717W133   0.847838 153

您忘记包含最后一列dt_pts的逻辑。这里,我已经包括了表3的dt_pts列。试试这个,它可能对你有用

 insert into tbl3 (Ticker, cusip_id, maxcor, dt_pts) 
 select b.ID, a.CUSIP_ID1 No_indx_cusip, MAX(abs(a.cor)) maxcor, a.dt_pts dt_pts
 from  tbl1 a, tbl2 b
 where a.CUSIP_ID1 = b.CUSIP_ID
 group by a.CUSIP_ID1, b.Ticker
 order by maxcor desc
 select * from tbl3

看起来您需要在MAXabsa.cor上与tbl1中的cor值进行额外的连接,以检索max cor值的实际dt_pnt。我认为下面的方法会起作用,因为它会连接回CUSIP_ID1上的tbl1表,并利用HAVING子句只返回dt_pnts值,其中cor值等于MAXabsa.cor值:

select 
    b.ID, a.CUSIP_ID1 No_indx_cusip, MAX(abs(a.cor)) maxcor, dt.dt_pnts
from  
    tbl1 a INNER JOIN
    tbl2 b ON
        a.CUSIP_ID1 = b.CUSIP_ID INNER JOIN
    (SELECT CUSIP_ID1, cor, dt_pnts FROM Table1) dt ON a.CUSIP_ID1 = dt.CUSIP_ID1
WHERE
    a.dt_pnts > 10
group by a.CUSIP_ID1, b.ID, dt.dt_pnts, dt.cor
having dt.cor = MAX(abs(a.cor))

这么长的问题很容易解决,我知道,但我只是想说清楚!你还没有在你当前的查询中为dt_pts写一个列,使用连接会对你有所帮助。使用隐式连接是一种可怕的编码实践。请改掉这个坏习惯。除了代码外,通常最好还包括推理。谢谢。我们希望人们从网站上学习,并能够将答案应用到他们自己的具体问题上。这就是为什么我在这里。谢谢你让我知道。这并没有给我相应的值,13个dt_pnts,我想与maxabsa.cor它返回所有1000+值,我在我的原始图表。dt_pnts也需要包含在group by子句中。我可以添加一个条件,为dt_pnts>10选择maxabsa.cor吗@cgsmksI认为您应该能够将WHERE子句添加到SELECT CUSIP_ID1,cor,dt_pnts FROM Table1位,SELECT CUSIP_ID1,cor,dt_pnts FROM Table1 WHERE dt_pnts>10,这将从13个结果中选择10个。。我想从原始表tbl1中为dt_pnts>10选择maxabsa.cor。。。非常感谢。我编辑了上面的代码来解释dt_pnts>10的情况。