锄头根据条件分割多列中的一列数据

时间:2018-02-28 15:33:49

标签: postgresql

我有一张包含数据的表

Category.                            New data
Cost of equipment.                    23
Price of equipments.                  45
Cost of M&C.                          13
Price of M&C.                         12

另一张桌子

Category
Equipments
M&C

现在我想要数据如下

Category                 Cost                   Price
Equipment                 23                    45
M&C                       13                    12

你能帮我解决一下吗?

1 个答案:

答案 0 :(得分:0)

你可以试试这个。更好的方法是改变你的桌面设计。

请注意,加入时我必须使用RTRIM从设备中删除s。我不知道您的数据中的任何其他变化可能在两个表之间不匹配。请相应更改加入条件(或使用REGEXP匹配,而不是ILIKE,如果他们不是

SQL Fiddle

PostgreSQL 9.6架构设置

CREATE TABLE Table1
    (Category varchar(19), New_data int)
;

INSERT INTO Table1
    (Category, New_data)
VALUES
    ('Cost of equipment', 23),
    ('Price of equipments', 45),
    ('Cost of M&C', 13),
    ('Price of M&C', 12)
;


CREATE TABLE Table2
    (Category varchar(10))
;

INSERT INTO Table2
    (Category)
VALUES
    ('Equipments'),
    ('M&C')
;

查询1

WITH t1
AS (
    SELECT b.category
        ,a.new_data
    FROM TABLE1 a
    INNER JOIN TABLE2 b ON a.Category ILIKE '%cost%' || RTRIM(b.Category, 's') || '%'
    )
    ,t2
AS (
    SELECT c.category
        ,a.new_data
    FROM TABLE1 a
    INNER JOIN TABLE2 c ON a.Category ILIKE '%price%' || RTRIM(c.Category, 's') || '%'
    )
SELECT t1.category
    ,t1.new_data AS cost
    ,t2.new_data AS price
FROM t1
INNER JOIN t2 ON t1.category = t2.category

<强> Results

|   category | cost | price |
|------------|------|-------|
| Equipments |   23 |    45 |
|        M&C |   13 |    12 |