源表:
table1(col1,col1,col3 col4)
----------------------
1 101 现金 98
2 102 银行存存 198
3 201 应付款待 98
4 202 其它付款 198如何来实现如下的结果
------------------
c1 c2 c3 c4 c5 c6
------------------------------------
101 现金 98 201 应付款待 98
102 银行存存 198 202 其它付款 198---
也就是从科目余额表转成资产负债表格式的SQL 。分不够,可另加。
table1(col1,col1,col3 col4)
----------------------
1 101 现金 98
2 102 银行存存 198
3 201 应付款待 98
4 202 其它付款 198如何来实现如下的结果
------------------
c1 c2 c3 c4 c5 c6
------------------------------------
101 现金 98 201 应付款待 98
102 银行存存 198 202 其它付款 198---
也就是从科目余额表转成资产负债表格式的SQL 。分不够,可另加。
insert into tb values(1, 101, '现金' ,98 )
insert into tb values(2, 102, '银行存存' ,198)
insert into tb values(3, 201, '应付款待' ,98 )
insert into tb values(4, 202, '其它付款' ,198)
goselect
max(case id2 when 0 then col2 end) c1,
max(case id2 when 0 then col3 end) c2,
max(case id2 when 0 then col4 end) c3,
max(case id2 when 1 then col2 end) c4,
max(case id2 when 1 then col3 end) c5,
max(case id2 when 1 then col4 end) c6
from
(
select (col1 - 1) / 2 id1 ,
(col1 - 1) % 2 id2 ,
col2 , col3 , col4
from tb
) t
group by id1 drop table tb/*
c1 c2 c3 c4 c5 c6
----------- ---------- ----------- ----------- ---------- -----------
101 现金 98 102 银行存存 198
201 应付款待 98 202 其它付款 198(所影响的行数为 2 行)
*/
DECLARE @TB TABLE(col1 INT,col2 INT,col3 NVARCHAR(5), col4 INT)
INSERT @TB
SELECT 1, 101, N'现金', 98 UNION ALL
SELECT 2, 102, N'银行存存', 198 UNION ALL
SELECT 3, 201, N'应付款待', 98 UNION ALL
SELECT 4, 202, N'其它付款', 198SELECT *,(COL1-1)/2 AS GRP INTO # FROM @TBSELECT A.COL2,A.COL3,A.COL4,B.COL2,B.COL3,B.COL4
FROM (
SELECT *,RNO=COL1-(SELECT COUNT(*) FROM # WHERE GRP<A.GRP) FROM # AS A WHERE GRP=0) A
JOIN (
SELECT *,RNO=COL1-(SELECT COUNT(*) FROM # WHERE GRP<A.GRP) FROM # AS A WHERE GRP=1) B
ON A.RNO=B.RNODROP TABLE #
/*
COL2 COL3 COL4 COL2 COL3 COL4
----------- ----- ----------- ----------- ----- -----------
101 现金 98 201 应付款待 98
102 银行存存 198 202 其它付款 198
*/SELECT MAX(CASE WHEN (col1-1)%2=0 THEN COL2 END) AS COL2,
MAX(CASE WHEN (col1-1)%2=0 THEN COL3 END) AS COL3,
MAX(CASE WHEN (col1-1)%2=0 THEN COL4 END) AS COL4,
MAX(CASE WHEN (col1-1)%2=1 THEN COL2 END) AS COL5,
MAX(CASE WHEN (col1-1)%2=1 THEN COL3 END) AS COL6,
MAX(CASE WHEN (col1-1)%2=1 THEN COL4 END) AS COL7
FROM @TB GROUP BY (col1-1)/2
/*
COL2 COL3 COL4 COL5 COL6 COL7
----------- ----- ----------- ----------- ----- -----------
101 现金 98 102 银行存存 198
201 应付款待 98 202 其它付款 198
*/
我要的结果是
c1 c2 c3 c4 c5 c6
--- -------- ----- --- ------- ----------
101 现金 98 201 应付款待 98
102 银行存存 198 202 其它付款 198
而不是
COL2 COL3 COL4 COL5 COL6 COL7
----------- ----- ----------- ----------- ----- -----------
101 现金 98 102 银行存存 198
201 应付款待 98 202 其它付款 198