Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Join 水平转换表,需要时填充空列_Join_View_Null - Fatal编程技术网

Join 水平转换表,需要时填充空列

Join 水平转换表,需要时填充空列,join,view,null,Join,View,Null,我有两张桌子 命令 和标记 ______________________________ |OrdNum |RowNum| Mark | ------------------------------ |1234 |1 | AB | |1238 |1 | XY | |1238 |2 | XZ | |1745 |1 | KD | |1745

我有两张桌子
命令

和标记

______________________________
|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    |   
------------------------------
对于每个订单,标记表中最多可以有1条到5条对应记录。
我需要做一种“水平”连接,在不发生错误的地方使用空值。坦率地说,我甚至不确定这能不能做到。 最终结果应该如下所示

_____________________________________________________
|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(SQLServer2008)中,我尝试了以下连接 为了简化,我们只考虑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…)

可能重复的-mark1(m.Mark或NULL)…可能重复的dmitryro感谢您的提示。然而,我的需要是不同的。这五个联接基于相同的两列,但需要使用不同的WHERE子句。正如我在原来的问题中所说,我甚至不知道这是否可能。顺便说一句,我在谈论T-SQL可能与-mark1重复(m.Mark或NULL)…可能与dmitryro重复感谢您的提示。然而,我的需要是不同的。这五个联接基于相同的两列,但需要使用不同的WHERE子句。正如我在原来的问题中所说,我甚至不知道这是否可能。顺便说一下,我正在谈论T-SQL
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