我有一张包含数据的表
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
你能帮我解决一下吗?
答案 0 :(得分:0)
你可以试试这个。更好的方法是改变你的桌面设计。
请注意,加入时我必须使用RTRIM
从设备中删除s
。我不知道您的数据中的任何其他变化可能在两个表之间不匹配。请相应更改加入条件(或使用REGEXP
匹配,而不是ILIKE
,如果他们不是
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 |