Mysql 如何在单个查询中获得不同列中的奇偶ID?
例如,我有一张如下所示的表格。。我希望在偶数/奇数ID的基础上有单独的列Mysql 如何在单个查询中获得不同列中的奇偶ID?,mysql,sql,Mysql,Sql,例如,我有一张如下所示的表格。。我希望在偶数/奇数ID的基础上有单独的列 ----------------------------------------------------- | ID | Names ----------------------------------------------------- | 1 | Name1 ----------------------------------------------------- | 2 | Name2 ------
-----------------------------------------------------
| ID | Names
-----------------------------------------------------
| 1 | Name1
-----------------------------------------------------
| 2 | Name2
-----------------------------------------------------
| 3 | Name3
-----------------------------------------------------
| 4 | Name4
-----------------------------------------------------
我想设计一个查询,可以给我
-------------------
| Even | Odd |
-------------------
| Name2 | Name1 |
-------------------
| Name4 | Name3 |
-------------------
如果要获得奇数或偶数,请使用下一个查询: 选择奇数记录:
SELECT * FROM table WHERE ID % 2 = 1
选择偶数
SELECT * FROM table WHERE ID % 2 = 0
如果要装饰为两列,请尝试下一种解决方案:
SELECT
odd.name as Odd,
(SELECT name FROM table WHERE ID = odd.ID + 1 ) as Even
FROM
table as odd
WHERE
odd.ID % 2 = 1
使用模运算符%查找奇偶性(偶数或奇数性质)
…其中id%2等于0
这将在结果中为您提供均匀的id
不等于0的是奇数id。如果您的id列包含序号,且序号之间没有任何间隙,则:
SELECT t1.name as ODD,
t2.name as EVEN
FROM YourTable t1
left outer JOIN YourTable t2
ON t1.Id + 1 = t2.Id
where t1.Id%2 = 0
注意:如果数字之间存在间隙,则一些奇数
将显示为空
,或者如果间隙大于3,则可能跳过该名称
select
max(case id%2 when 1 then name end) as odd,
max(case id%2 when 0 then name end) as even
from your_table
group by floor((id+1)/2)
上述结果集可通过以下代码实现-
SELECT Even, Odd
FROM (SELECT *, ROW_NUMBER()OVER(ORDER BY Even) AS ROW
FROM (SELECT CASE WHEN ID % 2 = 0 THEN Names ELSE NULL END AS 'Even'
FROM TableName)TAB1
WHERE Even IS NOT NULL)T1
FULL OUTER JOIN
(SELECT *, ROW_NUMBER()OVER(ORDER BY Odd) AS ROW FROM
(SELECT CASE WHEN ID % 2 = 1 THEN Names ELSE NULL END AS 'Odd'
FROM TableName) TAB2
WHERE Odd IS NOT NULL) T2
ON T1.ROW=T2.ROW
如果您的ID是连续的,那么
SELECT tb1.ODD, tb2.EVEN
FROM
(
SELECT Id, name ODD
FROM YourTable
where (`Id` % 2) = 1
) AS tb1
JOIN
(SELECT Id, name EVEN
FROM YourTable
WHERE (`Id` % 2) = 0
) AS tb2
ON (tb1.Id + 1 = tb2.Id)
WHERE tb1.ODD IS NOT NULL
ORDER BY tb1.Id
这是两个不同的问题。。我想设计一个可以在同一个查询的不同列中为我提供一个关于使用PIVOT的SQL SERVER的很好的答案,然后看到这是mySQL。。。无论如何,如果你想看的话,SQLFIDLE是一个很好的解决方案。您使用按楼层分组((id+1)/2)而不是按单元分组((id)/2)的任何原因?