簡體   English   中英

SQL將具有兩個不同值的兩個相等的列名稱合並為一行

[英]SQL Merge two equal column names with two different values into one row

我想將具有不同值的兩個相等的列名稱(meta_value)合並為一行而不是兩個的結果。

SELECT t1.ID, t1.post_content AS product, t2.meta_value AS price
FROM wp_posts AS t1
INNER JOIN wp_postmeta AS t2 ON ( t1.id = t2.post_id ) 
WHERE t1.post_type =  'product'
LIMIT 0 , 30

結果是

ID      product      price
1973    product1     12.35
1973    product1     12.10

我希望它看起來像這樣

ID      product      price      sell
1973    product1     12.35      12.10

價格的meta_key為_price,出售的meta_key為_sell

看來您可以將聚合函數與case語句一起使用來轉換數據

SELECT t1.ID, 
   t1.post_content AS product, 
   max(case when meta_key = '_price' then t2.meta_value end) AS price, 
   max(case when meta_key = '_sell' then t2.meta_value end) AS sell
FROM wp_posts AS t1
INNER JOIN wp_postmeta AS t2 ON ( t1.id = t2.post_id ) 
WHERE t1.post_type =  'product'
GROUP BY t1.ID, t1.post_content
LIMIT 0 , 30

但是根據您的表結構還不清楚,因此您也可以使用:

SELECT t1.ID, 
   t1.post_content AS product, 
   max(t2.meta_value) AS price, 
   min(t2.meta_value) AS sell
FROM wp_posts AS t1
INNER JOIN wp_postmeta AS t2 ON ( t1.id = t2.post_id ) 
WHERE t1.post_type =  'product'
GROUP BY t1.ID, t1.post_content
LIMIT 0 , 30
SELECT
  t1.ID,
  t1.post_content AS product,
  max(case when t2.meta_key='_price' then t2.meta_value end) AS price,
  max(case when t2.meta_key='_sell' then t2.meta_value end) AS sell
FROM wp_posts AS t1
     INNER JOIN wp_postmeta AS t2 ON ( t1.id = t2.post_id )
WHERE t1.post_type =  'product'
GROUP BY t1.ID, t1.post_content
LIMIT 0 , 30

希望這對您有幫助,

SELECT t1.ID, t1.post_content AS product,max(t2.meta_value) as price,min(t2.meta_value) as sell
FROM wp_posts AS t1
INNER JOIN wp_postmeta AS t2 ON ( t1.id = t2.post_id ) 
WHERE t1.post_type =  'product'
LIMIT 0 , 30

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM