2017-03-14 19 views
3

如何顯示每2行到單列如何從表

Rowid batch maker checker date 
1  101 john null 4feb 
2  101 john raja 4feb 
3  101 john null 5feb 
4  101 john raja 6feb 
5  101 john null 9feb 

預期輸出

Batch maker checker 
101 john raja -- 1st and 2nd row 
101 john raja -- 3rd and 4th row 
101 john null -- 5th row only 

另外表將爲n nunber得到各2行到單列的列

如何查詢將每兩行合併爲單行

+0

自外連接。 – jarlh

+0

刪除某些行後,RowId最有可能會出現空白。 'Row_number()over(order by rowid)'會給你提供可靠的序列來與'%2'一起使用 – Serg

+0

如果要合併的兩行具有不同的批量值,該怎麼辦? – jarlh

回答

0

組在col1,ISNULL(COL2, '王侯'),COL3

+0

是的,如果規則比例子所示更復雜,那麼你可能需要做一些外部施工 – vikjon0

0
SELECT * FROM Players WHERE id % 2 = 0 
1

你可以像這樣的東西

select coalesce(t2.batch, t1.batch), 
     coalesce(t2.maker, t1.maker), 
     coalesce(t2.checker, t1.checker) 
from table t1 
left join 
     table t2 
on  t1.id + 1 = t2.id and 
     t1.id % 2 = 1 

奇數行嘗試將下面的人來參加,如果他們存在。如果存在,則從偶數行中選擇列,否則從奇數列中選擇。

+0

如果t1和t2行都存在,那麼這些合併將會導致結果上升。 – jarlh

+0

的確如此,但我認爲數據將遵循所提供的模式OP。 –

0

嘗試這樣的:

DECLARE @Table TABLE (Rowid int,batch varchar(100),maker varchar(100),checker varchar(100),date varchar(100)) 
DECLARE @Table1 TABLE (batch varchar(100),maker varchar(100),checker varchar(100)) 
INSERT INTO @Table 
SELECT 1,101,'john',null,'4feb' UNION ALL 
SELECT 2,101,'john','raja','4feb' UNION ALL 
SELECT 3,101,'john',null,'5feb' UNION ALL 
SELECT 4,101,'john','raja','6feb' UNION ALL 
SELECT 5,101,'john',null,'9feb' 

DECLARE @i INT=1,@RowId INT 
WHILE @i<=(SELECT COUNT(*) FROM @Table) 
BEGIN 
SELECT @RowId= CASE WHEN ISNULL(checker,'0')='0' THEN @i+1 ELSE @i END FROM @Table WHERE [email protected] 
INSERT INTO @Table1 SELECT batch,maker,checker FROM @Table WHERE [email protected] 
IF @@ROWCOUNT=0 
INSERT INTO @Table1 SELECT batch,maker,checker FROM @Table WHERE [email protected] 
SET @[email protected]+2 
END 
SELECT * FROM @Table1 
+0

奇數行和偶數行的聯合將只返回整個表 –

+0

@StefanoZanini現在嘗試 –

0

試試這個,

DECLARE @Table TABLE (Rowid int,batch varchar(100),maker varchar(100) 
,checker varchar(100),date varchar(100)) 

INSERT INTO @Table 
SELECT 1,101,'john',null,'4feb' UNION ALL 
SELECT 2,101,'john','raja','4feb' UNION ALL 
SELECT 3,101,'john',null,'5feb' UNION ALL 
SELECT 4,101,'john','raja','6feb' UNION ALL 
SELECT 5,101,'john',null,'9feb' 
select Batch, maker, checker from @Table 
where Rowid %(2)=0 
union ALL 
select Batch, maker, checker from @Table a 
where Rowid %(2)=1 
and not exists(select * from @Table b 
where b.Rowid>a.Rowid and Rowid %(2)=0)