基于相同列值的SQL查询

时间:2019-07-08 21:53:50

标签: sql sql-server-2012

我有一个如下表

encno  payername payment adjustment
1        ahp1      -0.00   -180
1        map1      -112    -220
2        ahp2       0.20    0.23
2        map1       null    null
3        ahp3       0.20    0.23
3        map2       null    null

我的查询是在地图为null的情况下,没有遭遇。但如果没有遇到,它也应该显示ahp记录。 coz ahp和map将具有相同的enc no,如示例所示。 请帮助

预期结果

encno     payername   payment adjustment
    2        ahp2       0.20    0.23
    2        map1       null    null
    3        ahp3       0.20    0.23
    3        map2       null    null

2 个答案:

答案 0 :(得分:0)

通过此查询,您将获得所需的ecno

select ecno from tablename
where payment is null and adjustment is null

因此,您可以将其与IN运算符一起使用:

select * from tablename
where ecno in (
  select ecno from tablename
  where payment is null and adjustment is null
)

答案 1 :(得分:0)

我相信这是您所要的,您想要payername类似于mappaymentadjustment列为NULL的记录并且您还希望记录具有相同的encno号,但是payername类似于ahp。如果是这样,此查询将执行以下操作:

SELECT mapTable.*,
    ahpTable.* 
FROM #your table name# AS mapTable
JOIN #your table name# AS ahpTable ON aphTable.encno = mapTable.encno
    AND ahpTable.payername <> mapTable.payername
WHERE mapTable.payername LIKE 'map%'
    AND mapTable.payment IS NULL
    AND mapTable.adjustment IS NULL
ORDER BY mapTable.encno, ahpTable.encno