我有2个表TableA
和TableB
,这是两个表的数据
OrderNumber LineSEQNo SequenceNumber CommentText
2145106 0000000001 000 ABB -
2145106 0000000001 001 2" AL. pole 7'8"
和TableB如下
SalesOrderNumber LineSEQNo desc1 desc2
2145106 0000000001 ORDER DIDN't NULL
2145106 0000000002 ABB BCC
2145106 0000000003 NULL Customer did NOT get any.
现在我想要TableB
的输出。我的意思是输出应该与TableB
具有相同的计数...
LineSEQNo
(不同)TableB.LineSEQNo
会在TableA
核对LineSEQNo
。如果它存在于TableA
中,则会显示该SequenceNumber
的{{1}},并根据顺序将LineSEQNo
合并为一行。CommentText
中不存在LineSEQNo
,那么TableA
和desc1
将会联合desc2
因此输出应如下所示:
LineSEQNo
希望我说清楚。
现在只有解决方案的解决方案才是2145106 0000000001 ABB - 2" AL. pole 7'8"
2145106 0000000002 ABB BCC
2145106 0000000003 Customer did NOT get any.
循环..
有没有其他方法可以在没有循环的情况下获得所需的结果?
答案 0 :(得分:2)
困难的部分是连接tablea的字符串。您可以在子查询中执行此操作,然后使用left join
并使用coalesce()
完成逻辑:
select b.*,
coalesce(a.commenttext, coalesce(desc1, '') + coalesce(desc2, '')
from tableb b left join
(select a.ordernumber, a.lineseqno,
(select a2.commenttext as commenttext
from tablea a2
where a2.ordernumber = a.ordernumber and a2.lineseqno = a.lineseqno
for xml path (''), TYPE
).value('.[1]', N'varchar(max)') as commenttext
from tablea a
group by a.ordernumber, a.lineseqno
) a
on b.ordernumber = a.ordernumber and b.lineseqno = a.lineseqno;
Here是一个显示基本想法的SQL小提琴。