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

问题描述 投票:0回答:3

我需要一个帮助,将第一列中的行号数据和第二列中的奇数行号数据相加。使用SQL Server 2008 / SQL server 2008 R2 ...

id      Data
1       TK104
2       ABC   
3       TK106
4       XYZ

寻找像输出一样的东西

NAME          VALUE
TK104         ABC
TK106         XYZ
sql sql-server
3个回答
1
投票

如果你的id可以包含'gap',请使用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

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

即使在第一列,第二列也是奇数,这将为您提供。我们的一个数据库中的表中的示例:

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

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
© www.soinside.com 2019 - 2024. All rights reserved.