水平变换表格,需要时填充NULL列
我有两张桌子
命令
_____________________
|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 ..)
链接地址: http://www.djcxy.com/p/76297.html上一篇: Transform a table horizontally, with filling NULL columns when needed