我需要显示来自连接的最终结果的一些列。这些列分为3组,例如:
name_1, addr_1, prefecture_1, price_1,
name_2, addr_2, prefecture_2, price_2,
name_3, addr_3, prefecture_3, price_3
其中,这3个组来自一个联接,该联接应根据排序键carrier_cd2仅返回3条记录。_1组是第一行,_2组是第二行,_3是第三行。
我的问题与this SO question几乎相同,但我需要3条记录而不是2条。
我已经提出了我的初始SQL查询:
SELECT
inner_t12.contract_no,
inner_t13.carrier_cd2,
inner_t13.addr,
inner_t13.prefecture,
inner_t13_2.carrier_cd2,
inner_t13_2.addr,
inner_t13_2.prefecture,
inner_t13_3.carrier_cd2,
inner_t13_3.addr,
inner_t13_3.prefecture
FROM
処分業者契約マスタ inner_t12
LEFT OUTER JOIN 処分契約委託運搬業者マスタ inner_t13
ON inner_t12.contract_no = inner_t13.contract_no
JOIN 処分契約委託運搬業者マスタ inner_t13_2
ON inner_t13_2.contract_no = inner_t13.contract_no
AND inner_t13_2.carrier_cd2 > inner_t13.carrier_cd2
JOIN 処分契約委託運搬業者マスタ inner_t13_3
ON inner_t13_3.contract_no = inner_t13.contract_no
AND inner_t13_3.carrier_cd2 > inner_t13_2.carrier_cd2
截图
它返回最终结果集上所需的行,但是它需要是左外连接,以便即使连接没有生成所需的3行,它仍然会显示行,甚至2或1或无应该工作,并显示NULL代替。
希望你能在这方面给予点提示。
SQL服务器2005快速版
3条答案
按热度按时间dxxyhpgq1#
如果我理解了问题的意思,我想你是在找这个。把两个内联接括在左联接里面
laawzig22#
如果您的意思是只有3行(3条记录),只需在
SELECT
语句中添加"TOP 3
"。见下文。
wmtdaxz33#
我想我已经解决了这个问题,我所做的就是在JOIN的ON子句上使用ROW_NUMBER和OVER()。