如何摆脱额外的行?

时间:2015-03-25 07:53:50

标签: sql-server-2008

这是我的表结构:

enter image description here

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

一切正常,看起来如下:

enter image description here

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

我有额外的行,看起来如下:

enter image description here

如何摆脱额外的行?

期望的结果:

enter image description here

2 个答案:

答案 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
相关问题