3 votes

Comment écrire une requête SQL pour obtenir ce résultat ?

J'avais deux tableaux comme ci-dessous :

request_id

update_from_id

sw_ref_number

raised_by_user_id

date_relevée

1

0

1

3

2019-08-29 15:08:16.000

id

request_id

input_id

valeur

est_supprimé

21

1

1

00001

0

22

1

2

3

0

75

2

1

00002

0

76

2

2

0

Ma question est la suivante :

select req.request_id,
       req.sw_ref_number,
       reqDet.[value] , 
       reqDet.input_id 
FROM   SOF.tblSOFRequest req  
       left join SOF.tblSOFRequestDetails reqDet 
              on req.request_id = reqDet.request_id  
where  reqDet.input_id = 1 
or     reqDet.input_id = 2

Et après cela, mon résultat est le suivant :

request_id

sw_ref_number

valeur

input_id

1

1

00001

1

1

1

3

2

2

2

00002

1

2

2

2

Je veux un résultat comme :

request_id

sw_ref_number

epi_db_no

manuf_no

1

1

00001

3

2

2

00002

Ici input_id = 1 signifie epi_db_no et input_id = 2 signifie manuf_no.

Comment puis-je l'obtenir ?

Gracias

3voto

Prakash Kalakoti Points 1224

Vous pouvez le faire en utilisant l'auto-jointure comme dans la requête suivante.

SELECT req.request_id
    ,req.sw_ref_number
    ,reqDet.[value] AS epi_db_no
    ,reqDet2.[value] AS manuf_no
FROM SOF.tblSOFRequest req
LEFT JOIN SOF.tblSOFRequestDetails reqDet ON req.request_id = reqDet.request_id
LEFT JOIN SOF.tblSOFRequestDetails reqDet2 ON reqDet.request_id = reqDet2.request_id
    AND reqDet2.input_id = 2
WHERE reqDet.input_id = 1

3voto

Larnu Points 38828

Cela semble être un simple pivot. J'utilise ici l'agrégation conditionnelle :

SELECT req.request_id,
       req.sw_ref_number,
       MAX(CASE reqDet.input_id WHEN 1 THEN reqDet.[value] END) AS epi_db_no,
       MAX(CASE reqDet.input_id WHEN 2 THEN reqDet.[value] END) AS manuf_no
FROM SOF.tblSOFRequest req 
     JOIN SOF.tblSOFRequestDetails reqDet ON req.request_id = reqDet.request_id
WHERE reqDet.input_id IN (1,2)
GROUP BY req.request_id,
         req.sw_ref_number;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X