我有桌子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
但我刚拿到第一张唱片。
提前致谢
答案 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