我有两个表如下:
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。
我怎样才能得到这个?
谢谢
答案 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;