有两个表结构如下:
表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谢谢
表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谢谢
解决方案 »
- sql2000触发器
- 在windowsXP user帐户下无法登录本机SQl server 2005
- vfp:order;tag;这两个词的意思我一直都不太懂.高手能通俗一点解释吗?
- DATEPART使用的一个问题
- 【请问】修改了一个表的结构,如何更新其相关的视图、存储过程...
- 怎样得到数据库里所有用户表的表名和各字段名?
- 求助高手!我要实现如下功能,该如何建数据库?
- 数据库错误能汉化吗?
- sql server7中INNER JOIN有谁用过?具体怎么用给个例子?
- ASP.NET+SQL Server 2000的Web Application需要什么服务器?大伙提点儿意见
- 为何SELECT中不能同时指定列名和order by
- 单机版与网络版的区别
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 行受影响)
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
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
bb 优:1良:0中:0差:0 优:1良:0中:0差:0
--测试数据
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