如何编写sql查询来得到这个结果

时间:2021-07-27 07:47:41

标签: sql sql-server tsql

我有两个表如下:

<头>
request_id update_from_id sw_ref_number raised_by_user_id raised_date
1 0 1 3 2019-08-29 15:08:16.000
<头>
id request_id input_id 价值 is_deleted
21 1 1 00001 0
22 1 2 3 0
75 2 1 00002 0
76 2 2 0

我的查询是:

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

之后我的结果是:

<头>
request_id sw_ref_number 价值 input_id
1 1 00001 1
1 1 3 2
2 2 00002 1
2 2 2

我想要一个结果:

<头>
request_id sw_ref_number epi_db_no manuf_no
1 1 00001 3
2 2 00002

此处input_id = 1 表示epi_db_no,input_id = 2 表示manuf_no。

我怎样才能得到这个?

谢谢

2 个答案:

答案 0 :(得分:3)

您可以像以下查询一样使用自联接来完成此操作。

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

答案 1 :(得分:3)

这似乎是一个简单的支点。我在这里使用条件聚合:

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