这是我的表结构:
1)当我使用此查询时:
SELECT T_ActionTicketLog.ActionTicketID, T_ActionTicketLog.StatusID--, T_TicketPrint.TicketBarCode
FROM T_ActionTicketLog LEFT OUTER JOIN T_OrderTicket ON T_ActionTicketLog.TicketOrderID = T_OrderTicket.ID
--LEFT OUTER JOIN T_TicketPrint ON T_OrderTicket.ActionTicketID = T_TicketPrint.ActionTicketID and T_OrderTicket.ID = T_TicketPrint.OrderTicketID
where T_ActionTicketLog.ActionTicketID = 24014999
一切正常,看起来如下:
2)但是,当我使用此查询时因为我需要T_TicketPrint.TicketBarCode:
SELECT T_ActionTicketLog.ActionTicketID, T_ActionTicketLog.StatusID, T_TicketPrint.TicketBarCode
FROM T_ActionTicketLog LEFT OUTER JOIN T_OrderTicket ON T_ActionTicketLog.TicketOrderID = T_OrderTicket.ID
LEFT OUTER JOIN T_TicketPrint ON T_OrderTicket.ActionTicketID = T_TicketPrint.ActionTicketID and T_OrderTicket.ID = T_TicketPrint.OrderTicketID
where T_ActionTicketLog.ActionTicketID = 24014999
我有额外的行,看起来如下:
如何摆脱额外的行?
期望的结果:
答案 0 :(得分:0)
您将获得多条记录,因为每种状态都有多个条形码。如果你想获得最新的,我认为最高的数字是最新的,那么聚合第三个表将有所帮助:
SELECT T_ActionTicketLog.ActionTicketID, T_ActionTicketLog.StatusID,
max(T_TicketPrint.TicketBarCode)
FROM T_ActionTicketLog INNER JOIN T_TicketStatus ON T_ActionTicketLog.StatusID = T_TicketStatus.ID
LEFT OUTER JOIN T_OrderTicket ON T_ActionTicketLog.TicketOrderID = T_OrderTicket.ID
LEFT OUTER JOIN T_TicketPrint ON T_OrderTicket.ActionTicketID = T_TicketPrint.ActionTicketID and T_OrderTicket.ID = T_TicketPrint.OrderTicketID
group by T_TicketPrint.ActionTicketID
where T_ActionTicketLog.ActionTicketID = 24014999
答案 1 :(得分:0)
如果您只想要任何一个BarCode,那么您可以这样做:
SELECT T_ActionTicketLog.ActionTicketID ,
T_ActionTicketLog.StatusID ,
oa.TicketBarCode
FROM T_ActionTicketLog
LEFT OUTER JOIN T_OrderTicket ON T_ActionTicketLog.TicketOrderID = T_OrderTicket.ID
OUTER APPLY ( SELECT TOP 1
*
FROM T_TicketPrint
WHERE T_OrderTicket.ActionTicketID = T_TicketPrint.ActionTicketID
AND T_OrderTicket.ID = T_TicketPrint.OrderTicketID
ORDER BY BarCode
) oa
WHERE T_ActionTicketLog.ActionTicketID = 24014999
一栏中的所有条形码:
SELECT T_ActionTicketLog.ActionTicketID ,
T_ActionTicketLog.StatusID ,
oa.TicketBarCode
FROM T_ActionTicketLog
LEFT OUTER JOIN T_OrderTicket ON T_ActionTicketLog.TicketOrderID = T_OrderTicket.ID
OUTER APPLY ( SELECT STUFF((SELECT ',' + TicketBarCode
FROM T_TicketPrint
WHERE T_OrderTicket.ActionTicketID = T_TicketPrint.ActionTicketID
AND T_OrderTicket.ID = T_TicketPrint.OrderTicketID
FOR XML PATH('') ,
TYPE).value('.', 'NVARCHAR(MAX)'), 1,
1, '') AS TicketBarCode
) oa
WHERE T_ActionTicketLog.ActionTicketID = 24014999