Oracle SQL从具有共同行值的同一列生成多列

lmvvr0a8  于 2022-12-03  发布在  Oracle
关注(0)|答案(2)|浏览(188)

我有一个表element_types,其中element_type列包含金额类型Basic SalaryHousing Allowance,我想生成2列,一列用于Basic Salary,另一列用于Housing Allowance,这些类型链接到另一个表,如雇员和这些类型的值等,因此我想生成2个单独的列,并且不在行中显示类型和金额。

SELECT .....,       
       (SELECT element_name
          FROM pay_element_types_tl
         WHERE element_name IN ('Basic Salary')) Salary,       
       (SELECT element_name
          FROM pay_element_types_tl
         WHERE element_name IN ('Housing Allowance')) Housing

这会产生误差

single-row subquery returns multiple rows

我怎样才能达到我想要?
我已尝试使用where来使用多行子查询,但我希望从同一列派生多个具有不同名称的列

w3nuxt5m

w3nuxt5m1#

That's a CASE WHEN use case:

SELECT 
CASE WHEN element_name = 'Basic Salary'
  THEN element_name END AS Salary,
CASE WHEN element_name = 'Housing Allowance'
  THEN element_name END AS Housing
FROM PAY_ELEMENT_TYPES_TL;

Try out: db<>fiddle
Use aggregation around if required ( MAX , MIN etc., depending on what you need)

wnvonmuf

wnvonmuf2#

您可以使用条件聚合来根据需要透视数据,如下所示

SELECT MAX(CASE
           WHEN element_name = 'Basic Salary' THEN
                element_name
            END) AS Salary,
       MAX(CASE
           WHEN element_name = 'Housing Allowance' THEN
                element_name
            END) AS Housing
  FROM pay_element_types_tl

例如,在聚合值以防止生成多行时,将条件从WHERE子句移到CASE..WHEN表达式

相关问题