表A
编号     前缀     单号          类型
9084 090 00001083     1
9085 090 00001094     1
4958 100 00001105     2
4959 100 10010061     2 
4251 112 11211261     3
4252    112     11311361     3 如何得到如下结果
类型 090 100 112 
1     2   0   0
2    0   2    0
3    0   0    2

解决方案 »

  1.   

    使用 Group By 分组查询。
      

  2.   

    我写不出啊 最好能写好sql给我好吗?
      

  3.   


    select count(类型) from 表A group by 类型
      

  4.   

    感觉你不是很明白我的意思表A 
    编号    前缀    单号    类型 
    1     090 00001083    1 
    2     090 00001094    1 
    3     100 00001105    1
    4     100 00001106    2 
    5     100 10010066    2 
    6     100 00001106    2 
    7     100 10010064    3 
    8     112 11211261    3 
    9     112 11311363    3 
    10    112 11211266    2 
    11    112 11311367    3 
    12    112 11211221    3 
    13    112 11311461    1如何得到如下结果 
    类型 090 100 112 
    1    2   1   1
    2    0   3   1 
    3    0   1   2select count(类型) from 表A group by 类型
    无列名
    4
    4
    5
      

  5.   

    那就不是一条简单的SQL 语句就可以的。
      

  6.   

    sql2005里面有个新增的PIVOT运算符,自己去查一下用法就行了。。
      

  7.   

    不防采用一个临时表的方式来实现SET QUOTED_IDENTIFIER OFF
    GO
    SET ANSI_NULLS OFF 
    GOdeclare @sql varchar(1000),@colName varchar(10)create table #temp(类型 int)
    insert into #temp(类型)
    select 类型 from 表A GROUP BY 类型 ORDER BY 类型 ASC
    declare cur cursor for select 前缀 from 表A GROUP BY 前缀
    open cur
    FETCH NEXT FROM cur INTO @colName
    WHILE @@FETCH_STATUS=0
    BEGIN
    SET @sql='ALTER TABLE #Temp ADD COLUMN ['+@colName+'] varchar(10)'
    exec(@sql)
    SET @sql='UPDATE #Temp SET ['+@colName+']=b.BillCount  FROM #Temp a JOIN (SELECT 类型,前缀,COUNT(单号) AS BillCount FROM 表A GROUP BY 类型,前缀)b ON a.类型=b.类型 AND b.前缀="'+@colName+'"'
    exec(@sql)
    FETCH NEXT FROM cur INTO @colName
    END
    CLOSE cur
    DEALLOCATE cur
    SELECT * FROM #temp ORDER BY 类型 ASC
      

  8.   

    drop table 表A
    create table 表A
    (
    编号 int identity(1,1),
    前缀 char(3),
    单号 char(8),
    类型 int
    )
    GO 
    insert into 表A values('090','00001083',1)
    insert into 表A values('090','00001084',1)
    insert into 表A values('100','00001085',1)
    insert into 表A values('100','00001086',1)
    insert into 表A values('100','00001087',2)
    insert into 表A values('100','00001088',2)
    insert into 表A values('100','00001089',3)
    insert into 表A values('112','00001011',2)
    insert into 表A values('112','00001012',3)
    insert into 表A values('112','00001013',2)
    insert into 表A values('112','00001014',2)
    insert into 表A values('112','00001015',3)
    insert into 表A values('112','00001016',3)
    insert into 表A values('112','00001017',1)SET QUOTED_IDENTIFIER OFF 
    GO 
    SET ANSI_NULLS OFF 
    GO declare @sql varchar(1000),@colName varchar(10) create table #temp(类型 int) 
    insert into #temp(类型) 
    select 类型 from 表A GROUP BY 类型 ORDER BY 类型 ASC 
    declare cur cursor for select 前缀 from 表A GROUP BY 前缀 
    open cur 
    FETCH NEXT FROM cur INTO @colName 
    WHILE @@FETCH_STATUS=0 
    BEGIN 
    SET @sql='ALTER TABLE #Temp ADD COLUMN ['+@colName+'] varchar(10)' 
    exec(@sql) 
    SET @sql='UPDATE #Temp SET ['+@colName+']=b.BillCount  FROM #Temp a JOIN (SELECT 类型,前缀,COUNT(单号) AS BillCount FROM 表A GROUP BY 类型,前缀)b ON a.类型=b.类型 AND b.前缀="'+@colName+'"' 
    exec(@sql) 
    FETCH NEXT FROM cur INTO @colName 
    END 
    CLOSE cur 
    DEALLOCATE cur 
    SELECT * FROM #temp ORDER BY 类型 ASC
    drop table #temp 
    服务器: 消息 156,级别 15,状态 1,行 1
    在关键字 'COLUMN' 附近有语法错误。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 '090' 无效。
    服务器: 消息 156,级别 15,状态 1,行 1
    在关键字 'COLUMN' 附近有语法错误。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 '100' 无效。
    服务器: 消息 156,级别 15,状态 1,行 1
    在关键字 'COLUMN' 附近有语法错误。
    服务器: 消息 207,级别 16,
      

  9.   

    http://topic.csdn.net/u/20090313/12/ec5738fb-e207-4b85-8fcd-55f26dbc6093.html
    我的帖子里应该是你要的
      

  10.   

    下面的代码已测试通过:SET QUOTED_IDENTIFIER OFF
    GO
    SET ANSI_NULLS OFF
    GOdeclare @sql varchar(1000),@colName varchar(10)create table #temp(类型 int)
    insert into #temp(类型)
    select 类型 from 表A GROUP BY 类型 ORDER BY 类型 ASC
    declare cur cursor for select 前缀 from 表A GROUP BY 前缀
    open cur
    FETCH NEXT FROM cur INTO @colName
    WHILE @@FETCH_STATUS=0
    BEGIN
    SET @sql='ALTER TABLE #Temp ADD ['+@colName+'] INT DEFAULT(0)'
    exec(@sql)
    SET @sql='UPDATE #Temp SET ['+@colName+']=b.BillCount  FROM #Temp a JOIN (SELECT 类型,前缀,COUNT(单号) AS BillCount FROM 表A GROUP BY 类型,前缀)b ON a.类型=b.类型 AND b.前缀="'+@colName+'"'
    exec(@sql)
    FETCH NEXT FROM cur INTO @colName
    END
    CLOSE cur
    DEALLOCATE cur
    SELECT * FROM #temp ORDER BY 类型 ASC
    drop table #temp