如何在MySql中以水平格式获取垂直值

如何在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

我在下面提到了两个表:

表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        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分组