源表:
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 。分不够,可另加。

解决方案 »

  1.   

    create table tb(col1 int,col2 int,col3 varchar(10) , col4 int) 
    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 行)
    */
      

  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
    */
      

  3.   

    上面的,仔细一看都有问题,结果不是我想要的。
    我要的结果是
    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