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

时间:2017-12-19 19:28:29

标签: 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

3 个答案:

答案 0 :(得分:1)

如果您的id可以包含'空白'使用row_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

答案 1 :(得分:0)

我不完全确定你是指一张临时表,但如果你的意思是:

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

这样即使在第一列,第二列也是奇数。我们db之一的表中的一个例子:

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

答案 2 :(得分:0)

根据您的示例,您似乎想要将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