Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在单个查询中获得不同列中的奇偶ID?_Mysql_Sql - Fatal编程技术网

Mysql 如何在单个查询中获得不同列中的奇偶ID?

Mysql 如何在单个查询中获得不同列中的奇偶ID?,mysql,sql,Mysql,Sql,例如,我有一张如下所示的表格。。我希望在偶数/奇数ID的基础上有单独的列 ----------------------------------------------------- | ID | Names ----------------------------------------------------- | 1 | Name1 ----------------------------------------------------- | 2 | Name2 ------

例如,我有一张如下所示的表格。。我希望在偶数/奇数ID的基础上有单独的列

-----------------------------------------------------
| 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)的任何原因?