SQL联合查询同一表中具有不同where条件的同一列

问题描述

对于双向发布者报表,我需要在两个不同的列中使用Amount和Caramount。在同一列PROJECT_COST用于不同的条件。但是union只返回并集的第一部分的结果。

secondLast

解决方法

UNION在第二个查询中忽略您的别名。它将简单地将第一列映射到第一列,将第二列映射到第二列。不要重命名这些列,而是尝试对其重新排序。

对于双向发布者报表,我需要在两个不同的列中使用Amount和CarAmount。这两个PROJECT_COST列用于不同的条件。

select
peia.PROJECT_COST as Amount,Null CarAmount

from
Project_Element ppet,Project_Items peia,Project_Types petb

where
peia.TASK_ID=ppet.PROJ_ELEMENT_ID and petb.ATTRIBUTE1 in (51110,51170,59999)

UNION select
Null Amount,peia.PROJECT_COST as CarAmount

from
Project_Element ppet,Project_Types petb

where
peia.TASK_ID=ppet.PROJ_ELEMENT_ID and petb.ATTRIBUTE1 in (59500)

此外,我建议使用UNION ALLUNION由于只会返回不同的值,因此会导致性能下降。由于您要过滤不同的ID并将数据放在不同的列中,因此SQL Server不必担心重复。