根据其他列中的几种条件选择数据行

时间:2020-02-05 05:36:05

标签: sql sql-server multiple-columns

我正在使用SQL Server,并且有以下数据:

NO_PO_MYSAP ID_PLANNING_DETAIL ITEM BL
5501        13683              6    2019-11-28
5501        13683              7    2019-11-28
1101        13685              6    2019-12-10
1101        13685              6    2019-12-11
1101        13685              7    2019-12-10
1101        13685              7    2019-12-11

您可以看到它们的编号不同。在同一 NO_PO_MYSAP 下的行数,因为当我选择不同时, 13685 BL 具有不同的值。

我想要的是,如果 BL 在相似的 NO_PO_MYSAP 下返回不同的值,我希望将这些值粘贴在一起,这样我仍然可以获得2行数据,如< strong> ID_PLANNING_DETAIL = 13683 (行数取决于 ITEM 的数量,在这种情况下为6和7)。

因此返回数据将如下所示:

NO_PO_MYSAP ID_PLANNING_DETAIL ITEM BL
5501        13683              6    2019-11-28
5501        13683              7    2019-11-28
1101        13685              6    2019-12-10, 2019-12-11
1101        13685              7    2019-12-10, 2019-12-11

1 个答案:

答案 0 :(得分:0)

此演示可以为您提供帮助 SQLFiddle

SELECT distinct NO_PO_MYSAP, 
                ID_PLANNING_DETAIL,
                ITEM,  
                BL = STUFF((SELECT ', ' + bl_date
               FROM Table_bl bl  -- your table name from bl_date --
               WHERE bl.ID = A.ID
              FOR XML PATH('')), 1, 2, '')
FROM   v_temp_iseecargo_planning A 
       LEFT JOIN tbl_iseecargo_trx_planning_detail B 
              ON A.id_planning = B.id_planning  AND B.CHANGEID <> 'D'
       LEFT JOIN tbl_iseecargo_trx_lifting C 
              ON A.id_planning = C.id_planning AND C.CHANGEID <> 'D'
       LEFT JOIN tbl_iseecargo_trx_lifting_detail D 
              ON C.id_lifting = D.id_lifting AND D.CHANGEID <> 'D'
       LEFT JOIN tbl_iseecargo_md_port E 
              ON B.id_port_loading = E.id_port AND E.CHANGEID <> 'D'
       LEFT JOIN tbl_iseecargo_md_port F 
              ON B.id_port_discharge = F.id_port AND F.CHANGEID <> 'D'
       LEFT JOIN tbl_iseecargo_md_item G 
              ON B.id_item = G.id_item AND G.CHANGEID <> 'D'
       LEFT JOIN tbl_iseecargo_trx_vessel_acceptance H 
              ON C.id_lifting = H.id_lifting AND H.CHANGEID <> 'D'
       LEFT JOIN tbl_iseecargo_md_vessel I 
              ON H.id_vessel = I.id_vessel AND I.CHANGEID <> 'D'
       LEFT JOIN tbl_iseecargo_md_uom J 
              ON B.id_uom = J.id_uom AND J.CHANGEID <> 'D'
       LEFT JOIN tbl_iseecargo_md_shipping_type K 
              ON id_shipping_type_temp = K.id_shipping_type AND K.CHANGEID <> 'D'
       LEFT JOIN (SELECT DISTINCT id_planning_detail, 
                                  no_po_mysap 
                  FROM 
       tbl_iseecargo_trx_procurement_detail
       where CHANGEID <> 'D') L 
              ON b.id_planning_detail = L.id_planning_detail 
WHERE  A.ID_PLANNING in (13683, 13685) and B.id_uom = '3'
order by ALD_AWAL desc;