我在下面提到了两个表格:
表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_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
在 dbfiddle 上演示
对所有 if 块使用 GROUP_CONCAT
例:
GROUP_CONCAT(如果(x1.变量='状态',x1.value,null(( 作为State
,
或者如果你能看到完整的查询,它将是这样的。
选择 x2。ID2,x1。日期 GROUP_CONCAT(if(x2.Variable_Name='状态',x2.值,空(( 作为State
, GROUP_CONCAT(if(x2.Variable_Name="国家",x2。值,空(( 作为Country
, GROUP_CONCAT(if(x2.Variable_Name="密码",x2。值,空(( 作为PinCode
从表2 x2 在 x2 上左连接表1 x1。ID2=x1.ID 按 x2 分组。ID2;