有两个表a,b字段分别为:
a表
    票号     客户全称 此次应收 操作员 日期
200705030001,某某公司,120.00,张三,20070503
200705030002,某某公司,162.00,王二,20070503
200705030003,某某公司,190.00,张三,20070503
.
.
.B表
      票号,   产品名称    规格  产地 商标 销售金额
200705030001 某某产品  12*123   大连 1   100.00
200705030001 某某产品  wq*12    大庆 3   20.00
200705030002 某某产品  62s      美国 2   162.00
.
.
.如何按时间段(可由票号取得)得到如下统计表,计算出每人的商标销售总额
        1(商标)    2     3     4    5   
张三     2521.00   0     322  222   11
0李四    0       100     3.00   22  22
王二    100       85     6.3   22   225   .
.
.
请帮忙,想很长时间,没找到方法

解决方案 »

  1.   

    --如果商标的種類是固定的
    Select
    操作员,
    SUM(Case 商标 When 1 Then 销售金额 Else 0.00 End) As [1],
    SUM(Case 商标 When 2 Then 销售金额 Else 0.00 End) As [2],
    SUM(Case 商标 When 3 Then 销售金额 Else 0.00 End) As [3],
    SUM(Case 商标 When 4 Then 销售金额 Else 0.00 End) As [4],
    SUM(Case 商标 When 5 Then 销售金额 Else 0.00 End) As [5]
    From
    A
    Inner Join
    B
    On A.票号 = B.票号
    Group By
    操作员--如果商标的種類不是固定的
    Declare @S Nvarchar(4000)
    Select @S = N'Select 操作员'
    Select @S = @S + N', SUM(Case 商标 When ' + Rtrim(商标) + N' Then 销售金额 Else 0.00 End) As ['+ Rtrim(商标) + ']'
    From B Group By 商标
    Select @S = @S + N' From A Inner Join B On A.票号 = B.票号 Group By 操作员'
    EXEC(@S)
      

  2.   

    Create Table A
    (票号 Char(14),
     客户全称 Nvarchar(20),
     此次应收 Numeric(10, 2),
     操作员 Nvarchar(10),
     日期 Char(10))
    Insert A Select '200705030001',N'某某公司',120.00,N'张三','20070503'
    Union All Select '200705030002',N'某某公司',162.00,N'王二','20070503'
    Union All Select '200705030003',N'某某公司',190.00,N'张三','20070503'Create Table B
    (票号 Char(14),
     产品名称 Nvarchar(20),
     规格 Varchar(10),
     产地 Nvarchar(20),
     商标 Int,
     销售金额 Numeric(10, 2))
    Insert B Select '200705030001', N'某某产品',  '12*123',   N'大连', 1,   100.00
    Union All Select '200705030001', N'某某产品',  'wq*12',    N'大庆', 3,   20.00
    Union All Select '200705030002', N'某某产品',  '62s',         N'美国', 2,   162.00
    Union All Select '200705030003', N'某某产品',  '50g',         N'美国', 4,   190.00
    GO
    --如果商标的種類是固定的
    Select
    操作员,
    SUM(Case 商标 When 1 Then 销售金额 Else 0.00 End) As [1],
    SUM(Case 商标 When 2 Then 销售金额 Else 0.00 End) As [2],
    SUM(Case 商标 When 3 Then 销售金额 Else 0.00 End) As [3],
    SUM(Case 商标 When 4 Then 销售金额 Else 0.00 End) As [4],
    SUM(Case 商标 When 5 Then 销售金额 Else 0.00 End) As [5]
    From
    A
    Inner Join
    B
    On A.票号 = B.票号
    Group By
    操作员--如果商标的種類不是固定的
    Declare @S Nvarchar(4000)
    Select @S = N'Select 操作员'
    Select @S = @S + N', SUM(Case 商标 When ' + Rtrim(商标) + N' Then 销售金额 Else 0.00 End) As ['+ Rtrim(商标) + ']'
    From B Group By 商标
    Select @S = @S + N' From A Inner Join B On A.票号 = B.票号 Group By 操作员'
    EXEC(@S)
    GO
    Drop Table A, B
    --Result
    /*
    操作员 1 2 3 4 5
    王二 .00 162.00 .00 .00 .00
    张三 100.00 .00 20.00 190.00 .00*/