1、如何在VB中调用EXCEL实现页面设置、打印预览、打印。
2、数据库有一个表如下:
编号    产品    数量    所属
1       A        8     财务部
2       B        5     财务部
3       A        2     市场部
4       C        4     客户部
…………………………等等,其中“产品”和“所属”的内容不固定
要求结果:
产品    财务部    市场部    客户部   合计
A       8         2         0        10
B       5         0         0         5
C       0         0         4         4

解决方案 »

  1.   

    測試:
    create table ta(id numeric(5),procduct varchar(2),num numeric(10),dept varchar(20))insert into ta values(1,'A',8,'財務部')
    insert into ta values(2,'B',5,'財務部')
    insert into ta values(3,'A',2,'市場部')
    insert into ta values(4,'C',4,'客戶部')select procduct as 产品,
    sum(case when dept= '財務部' then num else 0 end) as 財務部,
    sum(case when dept= '市場部' then num else 0 end) as 市場部,
    sum(case when dept= '客戶部' then num else 0 end) as 客戶部,
    sum(num) as 合计
    from ta group by procduct測試結果:
    产品    财务部    市场部    客户部   合计
    =======================================
    A 8 2 0 10
    B 5 0 0 5
    C 0 0 4 4
      

  2.   

    TO:hdhai9451(※★AC米兰☆※) 
    感谢你的回答,不过这个问题是这样的啊,部门数量不确定,可能会有新的部门产生,而现有的部门又可能回不存在了另:我也很喜欢米兰,呵呵
      

  3.   

    可以用代碼控制的,
    dim sql as string
    dim rs as new adodb.recordset
    dim i as integer
    dim strfield as string
    sql="select distinct dept from ta"  '選出不重復的部門
    rs.cursorlocation=aduseclient
    rs.open sql,connif rs.recordCount >0 then
    rs.movefirst
    for i =0  to rs.recordcount-1
       strfield=strfield & ",sum(case when dept= '" & rs.fields(0) & "' then num   else  0 end) as " & rs.fields(0)
       rs.movenext
    next
    endifsql="select procduct as 产品 " & strfield & ",sum(num) as 合计 from ta group by procduct"
      

  4.   

    IF NOT OBJECT_ID('MASTER..TEST') IS NULL DROP TABLE TEST
    CREATE TABLE TEST (編號    INT IDENTITY,
                       產品    CHAR(1),
                       數量    INT,
                       所屬    NVARCHAR(20))
    INSERT INTO TEST (產品,數量,所屬)
    SELECT 'A',8,N'财务部'
    UNION
    SELECT 'B',5,N'财务部'
    UNION
    SELECT 'A',2,N'市场部'
    UNION
    SELECT 'C',4,N'客户部'GOIF NOT OBJECT_ID('MASTER..uspTest') IS NULL DROP PROC uspTestGOCREATE PROC uspTest
    AS
    DECLARE @DEPT NVARCHAR(20),
            @FIELDS NVARCHAR(200),
            @SQL    NVARCHAR(1000)
    SET @FIELDS = ''
    DECLARE TEST_CUR CURSOR FORWARD_ONLY FOR
    SELECT DISTINCT 所屬 FROM TEST
    OPEN TEST_CUR
    FETCH NEXT FROM TEST_CUR INTO @DEPT
    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @FIELDS = @FIELDS + ',SUM(CASE WHEN 所屬 = N''' + @DEPT + ''' THEN 數量 ELSE 0 END) AS ' + @DEPT
        FETCH NEXT FROM TEST_CUR INTO @DEPT
    END
    CLOSE TEST_CUR
    DEALLOCATE TEST_CUR
    IF @FIELDS = '' RETURN
    SET @SQL = 'SELECT 產品' + @FIELDS + ',SUM(數量) AS 合計 FROM TEST GROUP BY 產品'
    EXEC (@SQL)GOEXEC uspTest
    產品   市场部         客户部         财务部         合計          
    ---- ----------- ----------- ----------- ----------- 
    A    2           0           8           10
    B    0           0           5           5
    C    0           4           0           4(3 row(s) affected)
      

  5.   

    如果是 ACCESS 数据库,可以生成交叉表:
    TRANSFORM Sum(表1.数量) AS 数量之Sum
    SELECT 表1.产品, Sum(表1.数量) AS [总计 数量]
    FROM 表1
    GROUP BY 表1.产品
    PIVOT 表1.所属;
      

  6.   

    strSQL = "TRANSFORM Sum(表1.数量) AS 数量之Sum SELECT 表1.产品, Sum(表1.数量) AS [总计 数量] FROM 表1 GROUP BY 表1.产品 PIVOT 表1.所属;"rstCross.Open strSQL, cnn