将两个sql查询合并为一个查询

将两个sql查询合并为一个查询,sql,db2,Sql,Db2,如何组合以下两个查询,以便获得两列PAYMODE 和工资类型。两个查询都是相似的,并且针对同一个表。将两个sql查询合并为一个查询,这样我就不需要执行两个单独的查询 SELECT ETBL_DESC_TXT as PAYMODE FROM tedit WHERE CO_ID = 'CP' AND ETBL_TYP_ID = 'PMODE' AND ETBL_VALU_ID = 'RC' select ETBL_DESC_TXT as PAYTYPE FROM tedit WHERE

如何组合以下两个查询,以便获得两列PAYMODE 和工资类型。两个查询都是相似的,并且针对同一个表。将两个sql查询合并为一个查询,这样我就不需要执行两个单独的查询

SELECT ETBL_DESC_TXT as PAYMODE
FROM tedit
WHERE CO_ID = 'CP'
AND   ETBL_TYP_ID = 'PMODE'
AND   ETBL_VALU_ID = 'RC'


select ETBL_DESC_TXT as PAYTYPE
FROM tedit
WHERE CO_ID = 'CP'
AND   ETBL_TYP_ID = 'PTYPE'
AND   ETBL_VALU_ID = 'ER'
你总能做到这一点

select
    (
        SELECT ETBL_DESC_TXT
        FROM tedit
        WHERE CO_ID = 'CP'
        AND   ETBL_TYP_ID = 'PMODE'
        AND   ETBL_VALU_ID = 'RC'
    ) as PAYMODE,
    (    
        select ETBL_DESC_TXT
        FROM tedit
        WHERE CO_ID = 'CP'
        AND   ETBL_TYP_ID = 'PTYPE'
        AND   ETBL_VALU_ID = 'ER'
    ) as PAYTYPE
from SYSIBM.SYSDUMMY1
在SQL Server中,您可以这样做(很抱歉,无法在DB2中测试它)


因为记录出现在源数据的不同行中,所以我很难在单个结果行中检索它们。您可以在一个查询中获得结果,该查询提供两行。试试这个:

SELECT ETBL_DESC_TXT as PAYFIELD
FROM tedit
WHERE CO_ID = 'CP' AND (
      (ETBL_TYP_ID = 'PMODE' AND ETBL_VALU_ID = 'RC')
   OR (ETBL_TYP_ID = 'PTYPE' AND ETBL_VALU_ID = 'ER')
)
ORDER BY ETBL_TYP_ID

第一行将包含paymode,第二行将包含paytype。

使用
和((x='PMODE'和y='RC')或(x='PTYPE'和y='ER'))
为清晰起见,当条件有
时,请始终使用括号。在DB2中,始终需要一个表引用(您的第一个查询将抛出一个错误-您可以使用
sysibm/sysdummy1
)。
SELECT 'PAYMODE' as RowType,ETBL_DESC_TXT as PayValue
FROM tedit
WHERE CO_ID = 'CP'
AND   ETBL_TYP_ID = 'PMODE'
AND   ETBL_VALU_ID = 'RC'

union all

select 'PAYTYPE' as RowType, ETBL_DESC_TXT as PayValue
FROM tedit
WHERE CO_ID = 'CP'
AND   ETBL_TYP_ID = 'PTYPE'
AND   ETBL_VALU_ID = 'ER'
SELECT 'PAYMODE' as RowType,ETBL_DESC_TXT as PayValue
FROM tedit
WHERE CO_ID = 'CP'
AND   ETBL_TYP_ID = 'PMODE'
AND   ETBL_VALU_ID = 'RC'

union all

select 'PAYTYPE' as RowType, ETBL_DESC_TXT as PayValue
FROM tedit
WHERE CO_ID = 'CP'
AND   ETBL_TYP_ID = 'PTYPE'
AND   ETBL_VALU_ID = 'ER'