如何在MySql中以水平格式获取垂直值
我在下面提到了两个表: 表1:如何在MySql中以水平格式获取垂直值,mysql,Mysql,我在下面提到了两个表: 表1: ID Date X1 2019-01-01 14:12:18 X2 2019-01-01 18:43:32 表2: ID2 Variable_Name Value X1 state NY X1 Country USA X1 Pin Code 10001 X2
ID Date
X1 2019-01-01 14:12:18
X2 2019-01-01 18:43:32
表2:
ID2 Variable_Name Value
X1 state NY
X1 Country USA
X1 Pin Code 10001
X2 state TX
X2 Country USA
X3 Pin Code 73301
我需要通过以下格式连接两个表来获取详细信息:
ID Date State Country Pincode
X1 2019-01-01 14:12:18 NY USA 10001
x2 2019-01-01 18:43:32 TX USA 73301
我正在尝试使用下面的查询,但效果不好
select x2.ID,x1.Date,
if(x1.Variable='state',x1.value,null) as `State`,
if(x1.Variable='Country',x1.value,null) as `Country`,
if(x1.Variable='Pin Code',x1.value,null) as `PinCode`
from Table2 x1
left join Table1 x2 on x2.ID=x1.ID
where x2.ID in ('X1','X2') and x1.Variable_Name in
('state','Country','Pin Code')
GROUP BY x2.ID;
您需要使用条件聚合来获得所需的结果。请注意,由于查询中有关于
Variable\u Name
的条件,因此不需要在WHERE
子句中也包含这些条件:
SELECT t1.ID, t1.Date,
MAX(CASE WHEN t2.Variable_Name = 'state' THEN t2.Value END) AS state,
MAX(CASE WHEN t2.Variable_Name = 'Country' THEN t2.Value END) AS Country,
MAX(CASE WHEN t2.Variable_Name = 'Pin Code' THEN t2.Value END) AS `Pin Code`
FROM table1 t1
JOIN table2 t2 ON t2.ID2 = t1.ID
WHERE t1.ID IN ('X1', 'X2')
GROUP BY t1.ID, t1.Date
输出:
ID Date state Country Pin Code
X1 2019-01-01 14:12:18 NY USA 10001
X2 2019-01-01 18:43:32 TX USA 73301
对所有if块使用组\u CONCAT 例如: 组CONCAT(如果(x1.Variable='state',x1.value,null))为
状态
或者,如果您可以看到完整的查询,它将是这样的
选择x2.ID2,x1.Date,
组CONCAT(如果(x2.变量名称='state',x2.值,null))为状态
,
组CONCAT(如果(x2.变量名称='Country',x2.值,null))为国家
,
组CONCAT(如果(x2.Variable_Name='Pin Code',x2.Value,null))为PinCode
来自表2 x2
x2上的左联接表1 x1.ID2=x1.ID
按x2.ID2分组