Выберите строку данных на основе нескольких условий из других столбцов - PullRequest
1 голос
/ 05 февраля 2020

Я использую SQL Сервер, и у меня есть эти данные:

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 , потому что, когда я выбираю отчетливый, BL для 13685 имеет разные значения.

То, что я хочу, если BL возвращает разные значения при одинаковом NO_PO_MYSAP , я хочу, чтобы эти значения были объединены, поэтому я по-прежнему получаю 2 строки данных, как в 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 голосов
/ 05 февраля 2020

вот это демо может помочь 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;
...