我有两张桌子 订单
_____________________
|OrdNum |Stockid |
----------------------
|1234 |alpha |
|1238 |beta |
|1745 |gamma |
----------------------
和MARKS
______________________________
|OrdNum |RowNum| Mark |
------------------------------
|1234 |1 | AB |
|1238 |1 | XY |
|1238 |2 | XZ |
|1745 |1 | KD |
|1745 |2 | KS |
|1745 |3 | JJ |
|1745 |4 | RT |
|1745 |5 | PJ |
------------------------------
对于每个订单,MARKS表中可以有1个到最多5个相应的记录 我需要做一些"水平"使用NULL值进行连接,其中不发生任何相互影响。坦率地说,我甚至不确定它是否可以完成。 最终结果应如下所示
_____________________________________________________
|OrdNum |Mark1 |Mark2 |Mark3 |Mark4 |Mark5 |
-----------------------------------------------------
|1234 |AB |NULL |NULL |NULL |NULL |
|1238 |XY |XZ |NULL |NULL |NULL |
|1238 |KD |KS |JJ |RT |PJ |
-----------------------------------------------------
同样,最终视图必须是水平的,具有5(加订单号)列。 有谁知道这是否可能? 提前谢谢。
在T-SQL(SQL Server 2008)中,我尝试了以下联接 为简化起见,我们只考虑2列而不是5列。
SELECT o.OrdNum,
m1.Mark AS MARK1,
m2.Mark AS MARK2,
FROM ORDERS o
LEFT JOIN MARKS m1 ON o.OrdNum = m1.OrdNum WHERE m1.RowNum=1
LEFT JOIN MARKS m2 ON o.OrdNum = m2.OrdNum WHERE m2.RowNum=2
这是合成错误。
所以我按照以下方式修改了连接
SELECT o.OrdNum,
m1.Mark AS MARK1,
m2.Mark AS MARK2,
FROM ORDERS o
LEFT JOIN MARKS m1 ON o.OrdNum = m1.OrdNum
LEFT JOIN MARKS m2 ON o.OrdNum = m2.OrdNum
WHERE m1.RowNum=1 AND m2.RowNum=2
这不是我想要的,因为它不会产生只有与第一个RowNum相对应的记录的订单(此帖子开头的值,它不会显示订单号1234 ..)< / p>