有两个表结构如下:
表a如下:  
id 产品名称
1   aa
2   bb
表b如下:
id 总体满意度 质量满意度 aid
1     1           1        1
2     3           2        1
3     1           1        1
4     1           4        2其中总体满意度和质量满意度两个字段含义是:1表示优,2表示良,3表示中,4表示差
表a的id与表b的aid关联我想求sql语句实现统计表a中所有产品的满意度统计,以上表的结果统计应该如下面所示:产品名称     总体满意度                     质量满意度
aa           优:2 良:0中:1 差:0            优:2 良:1中:0差:0
bb           优:1 良:0中:0 差:0            优:0 良:0中:0差:1谢谢 

解决方案 »

  1.   

    --> 测试数据: #ta
    if object_id('tempdb.dbo.#ta') is not null drop table #ta
    go 
    create table #ta (id int,产品名称 varchar(2))
    insert into #ta
    select 1,'aa' union all
    select 2,'bb'
    --> 测试数据: #tb
    if object_id('tempdb.dbo.#tb') is not null drop table #tb
    go
    create table #tb (id int,总体满意度 int,质量满意度 int,aid int)
    insert into #tb
    select 1,1,1,1 union all
    select 2,3,2,1 union all
    select 3,1,1,1 union all
    select 4,1,4,2select 
    产品名称,
    总体满意度='优:'+ltrim(sum(case when 总体满意度=1 then 1 else 0 end))
      +'良:'+ltrim(sum(case when 总体满意度=2 then 1 else 0 end))
      +'中:'+ltrim(sum(case when 总体满意度=3 then 1 else 0 end))
      +'差:'+ltrim(sum(case when 总体满意度=4 then 1 else 0 end)),
    质量满意度='优:'+ltrim(sum(case when 质量满意度=1 then 1 else 0 end))
      +'良:'+ltrim(sum(case when 质量满意度=2 then 1 else 0 end))
      +'中:'+ltrim(sum(case when 质量满意度=3 then 1 else 0 end))
      +'差:'+ltrim(sum(case when 质量满意度=4 then 1 else 0 end))
     from #ta a,
    #tb b 
    where a.id=b.aid
    group by 产品名称
     产品名称 总体满意度                                                        质量满意度
    ---- ------------------------------------------------------------ ------------------------------------------------------------
    aa   优:2良:0中:1差:0                                                 优:2良:1中:0差:0
    bb   优:1良:0中:0差:0                                                 优:0良:0中:0差:1(2 行受影响)
      

  2.   

    IF OBJECT_ID('A') IS NOT NULL
       DROP TABLE A
    IF OBJECT_ID('B') IS NOT NULL
       DROP TABLE B
    GO
    CREATE TABLE A(ID INT IDENTITY PRIMARY KEY,NAME VARCHAR(20))
    CREATE TABLE B(ID INT IDENTITY PRIMARY KEY,MY1 INT,MY2 INT,AID INT)
    GO
    INSERT INTO A SELECT 'AA' UNION SELECT 'BB'INSERT INTO B SELECT 1,1,1 UNION ALL
     SELECT 3,2,1 UNION ALL
     SELECT 1,1,1 UNION ALL
     SELECT 1,4,2GOSELECT A.NAME 名称,'优:'+cast(COUNT(CASE WHEN B.MY1=1 THEN 1 END) as varchar(10))+
    '良:'+cast(COUNT(CASE WHEN B.MY1=2 THEN 1 END) as varchar(10))+
    '中:'+cast(COUNT(CASE WHEN B.MY1=3 THEN 1 END) as varchar(10))+
    '差:'+cast(COUNT(CASE WHEN B.MY1=4 THEN 1 END) as varchar(10)) 总体满意度,
    '优:'+cast(COUNT(CASE WHEN B.MY2=1 THEN 1 END) as varchar(10))+
    '良:'+cast(COUNT(CASE WHEN B.MY2=2 THEN 1 END) as varchar(10))+
    '中:'+cast(COUNT(CASE WHEN B.MY2=3 THEN 1 END) as varchar(10))+
    '差:'+cast(COUNT(CASE WHEN B.MY2=4 THEN 1 END) as varchar(10)) 质量满意度  
    FROM A JOIN B ON A.ID=B.AID
    GROUP BY A.NAME名称                   总体满意度                                                质量满意度AA                   优:2良:0中:1差:0                                         优:2良:1中:0差:0
    BB                   优:1良:0中:0差:0                                         优:0良:0中:0差:1
      

  3.   


    if object_id('a') >0 
     drop table a 
    create table a 
    (
     id  int ,
     [name] varchar(20)
    )
    insert into a values(1,'aa')
    insert into a values(2,'bb')if object_id('b')>0
    drop table b 
    create table b 
    (
      id int,
      总体满意度 int,
      质量满意度 int,
      aid int
    )
    insert into b values (1,1,1,1)
    insert into b values (2,3,2,1)
    insert into b values (3,1,1,1)
    insert into b values (4,1,1,2)
    select * from a
    select * from b
    select a.name,
    ('优:'+cast(sum(case when b.总体满意度=1 then 1 else 0 end) as varchar(20))
              +'良:'+cast(sum(case when b.总体满意度=2 then 1 else 0 end) as varchar(20))
              +'中:'+cast( sum(case when b.总体满意度=3 then 1 else 0 end) as varchar(20))
              +'差:'+cast(sum(case when b.总体满意度=4 then 1 else 0 end) as varchar(20)) ) as 总体满意度,
    ('优:'+cast( sum(case when b.质量满意度=1 then 1 else 0 end) as varchar(20))
              +'良:'+cast( sum(case when b.质量满意度=2 then 1 else 0 end) as varchar(20))
              +'中:'+cast( sum(case when b.质量满意度=3 then 1 else 0 end) as varchar(20))
              +'差:'+cast (sum(case when b.质量满意度=4 then 1 else 0 end) as varchar(20)) ) as 质量满意度
    from a join b on a.id = b.aid
    group by a.name
      

  4.   

    结果aa 优:2良:0中:1差:0 优:2良:1中:0差:0
    bb 优:1良:0中:0差:0 优:1良:0中:0差:0
      

  5.   


    --测试数据
    create table #t1
    (
    id int,
    [产品名称] nvarchar(100)
    )create table #t2
    (
    id int,
    [总体满意度] int,
    [质量满意度] int,
    aid int
    )insert into #t1
    select 1,'aa' union all
    select 2,'bb'insert into #t2
    select 1,1,1,1 union all
    select 2,3,2,1 union all
    select 3,1,1,1 union all
    select 4,1,4,2---统计语句
    SELECT a.[产品名称],
    B.[总体满意度],
    B.[质量满意度]
    FROM #T1 A INNER JOIN 
    (SELECT AID,
    '优:'+RTRIM(SUM(CASE WHEN [总体满意度]=1 THEN 1 ELSE 0 END))
    +'良:'+RTRIM(SUM(CASE WHEN [总体满意度]=2 THEN 1 ELSE 0 END))
    +'中:'+RTRIM(SUM(CASE WHEN [总体满意度]=3 THEN 1 ELSE 0 END))
    +'差:'+RTRIM(SUM(CASE WHEN [总体满意度]=4 THEN 1 ELSE 0 END)) AS [总体满意度],'优:'+RTRIM(SUM(CASE WHEN [质量满意度]=1 THEN 1 ELSE 0 END))
    +'良:'+RTRIM(SUM(CASE WHEN [质量满意度]=2 THEN 1 ELSE 0 END))
    +'中:'+RTRIM(SUM(CASE WHEN [质量满意度]=3 THEN 1 ELSE 0 END))
    +'差:'+RTRIM(SUM(CASE WHEN [质量满意度]=4 THEN 1 ELSE 0 END)) AS [质量满意度]
    FROM #T2
    GROUP BY AID) B ON A.ID=B.AID