Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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
Sql 如何将偶数行号数据添加到第一列,将奇数行号数据添加到第二列?_Sql_Sql Server - Fatal编程技术网

Sql 如何将偶数行号数据添加到第一列,将奇数行号数据添加到第二列?

Sql 如何将偶数行号数据添加到第一列,将奇数行号数据添加到第二列?,sql,sql-server,Sql,Sql Server,我需要帮助将偶数行号数据添加到第一列,将奇数行号数据添加到第二列。正在使用SQL server 2008/SQL server 2008 R2 示例 id Data 1 TK104 2 ABC 3 TK106 4 XYZ 寻找像这样的输出 NAME VALUE TK104 ABC TK106 XYZ 我不完全确定您是否指的是临时表,但如果您的意思是: CREATE TABLE #

我需要帮助将偶数行号数据添加到第一列,将奇数行号数据添加到第二列。正在使用SQL server 2008/SQL server 2008 R2

示例

id      Data
1       TK104
2       ABC   
3       TK106
4       XYZ
寻找像这样的输出

NAME          VALUE
TK104         ABC
TK106         XYZ

我不完全确定您是否指的是临时表,但如果您的意思是:

CREATE TABLE #ReturnData (Column1 VARCHAR(50), Column2 VARCHAR(50))

INSERT INTO #ReturnData (Column1, Column2) (
  SELECT
     CASE WHEN MyTable.ID % 2 = 0 THEN CONVERT(VARCHAR, whateverdata) ELSE '' END,
     CASE WHEN MyTable.ID % 2 > 0 THEN CONVERT(VARCHAR, whateverdata) ELSE '' END
  FROM MyTable
)


SELECT * FROM #ReturnData
DROP TABLE #ReturnData
这将在第一列中显示偶数,在第二列中显示奇数。我们的一个数据库中的表格示例:

(106 rows affected)
Column1                                            Column2
-------------------------------------------------- ------------------------
652                                                
                                                   653
654                                                
                                                   655

根据您的示例,看起来您希望将id=i的记录与id=i+1的记录连接起来。如果是,则应根据以下条件自联接表:

SELECT A.Data NAME, B.Data VALUE 
FROM Example A FULL JOIN Example B -- Self-join. Using a FULL join in case of gaps
ON A.id + 1 = B.id
AND B.id % 2 = 1 --Make sure that Value is odd 
AND A.id % 2 = 0 --Name is even

如果您的
id
可以包含“间隙”,请使用
row\u number()
和条件聚合

select 
     max(case when rn % 2 = 0 then data end) as name,
     max(case when rn % 2 = 1 then data end) as value
from
(
  select *, 
         row_number() over (order by id) as rn 
  from your_table
)
group by rn / 2

没有间隙,总是偶数行吗?进行自联接。
。。。和B.id%2=1(以保持完全的外部连接。)@jarlh评论的问题已得到修复。