看看这个SQL 怎么写?up有分。

dongxsoft 2002-07-01 09:49:34
表的结构如下:
CREATE TABLE [dbo].[l_reliability_data] (
[记录标识ID] [int] IDENTITY (1, 1) NOT NULL ,
[用户ID] [int] NOT NULL ,
[地区ID] [int] NOT NULL ,
[故障名称ID] [varchar] (20) NULL ,
[故障时刻] [datetime] NULL ,
[修复时间] [int] NULL ,
[故障原因] [varchar] (40) NULL
) ON [PRIMARY]
GO
1、现在我想求出以下结果:

故障名称ID,
故障次数(相当于记录数),
用户数(与“故障次数“不同的是,它有重复值),
故障总时间
group by 故障名称ID

请问SQL语句应该怎样写。
2、在报表中,如下格式如何实现:
A类 B类 C类
Ⅰ子类 total Ⅰ子类 total Ⅰ子类 total
Ⅱ子类 total Ⅱ子类 total Ⅱ子类 total
也可发邮件到:dongxsoft@sina.com。 我可以另外开贴加分。
...全文
20 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongxsoft 2002-07-01
  • 打赏
  • 举报
回复
报表的问题有没有高手帮我解决一下?份不够可以再加
短歌如风 2002-07-01
  • 打赏
  • 举报
回复
Select 故障名称ID,
Count(*) 故障次数,
Count(Distinct 用户ID) 用户数,
SUM(修复时间) 故障总时间
From l_reliability_data
Group By 故障名称ID

不太明白你的“修复时间”字段和“故障总时间”的含义,我的理解是把“修复时间”求和。
____ ____
\ p \ / g /
\ l \_/ n /
\ a o /
\ i s /
\ n /
\_/
sizzle 2002-07-01
  • 打赏
  • 举报
回复
接分。
sunssc 2002-07-01
  • 打赏
  • 举报
回复
使用case语句,应该能解决这个问题。请查一下sqlserver的帮助吧,
dongxsoft 2002-07-01
  • 打赏
  • 举报
回复
可是我怎么实现quickreport中按类(A.B.C)划分三列呢?
kuangning 2002-07-01
  • 打赏
  • 举报
回复
对于第二个问题可以创建一个临时表来实现。
具体的统计结果写入临时表就可以了
dongxsoft 2002-07-01
  • 打赏
  • 举报
回复
谢谢各位大虾的关注,让我受益匪浅,能不能再帮我看一下第二个报表问题。
wg007 2002-07-01
  • 打赏
  • 举报
回复
最好用临时表,不要用一句SQL语句实现。
否则涉及到SQL语句优化问题和SQl语句复杂度问题
kuangning 2002-07-01
  • 打赏
  • 举报
回复
SELECT a.*,b.* FROM
(SELECT 故障名称ID,COUNT(*) AS 故障次数,SUM(修复时间-故障时刻)
FROM l_reliability_data GROUP BY 故障名称ID) a,
(SELECT 故障名称ID,count(DISTINCT 记录标识ID) AS 用户数
FROM l_reliability_data GROUP BY 故障名称ID) b
WHERE a.故障名称ID=b.故障名称ID

肯定不行!没有看见‘修复时间’是一个整性的吗?他就是故障时长
chinasg 2002-07-01
  • 打赏
  • 举报
回复
呵呵,不好意思,看错字段了。把“修复时间”看成是修复时刻Datetime类型的字段了。同意kuangning(郎之间)(穷人)(其实什么都不是),否则也可以这么写
--------------------------
SELECT a.*,b.* FROM
(SELECT 故障名称ID,COUNT(*) AS 故障次数,SUM(修复时间)
FROM l_reliability_data GROUP BY 故障名称ID) a,
(SELECT 故障名称ID,count(DISTINCT 记录标识ID) AS 用户数
FROM l_reliability_data GROUP BY 故障名称ID) b
WHERE a.故障名称ID=b.故障名称ID
kuangning 2002-07-01
  • 打赏
  • 举报
回复
对于第二个问题可以创建一个临时表来实现。
具体的统计结果写入临时表就可以了
netlib 2002-07-01
  • 打赏
  • 举报
回复
SELECT a.*,b.* FROM
(SELECT 故障名称ID,COUNT(*) AS 故障次数,SUM(修复时间-故障时刻)
FROM l_reliability_data GROUP BY 故障名称ID) a,
(SELECT 故障名称ID,count(DISTINCT 记录标识ID) AS 用户数
FROM l_reliability_data GROUP BY 故障名称ID) b
WHERE a.故障名称ID=b.故障名称ID

还有行吗?你什么错误?
kuangning 2002-07-01
  • 打赏
  • 举报
回复
对于第二个问题可以创建一个临时表来实现。
具体的统计结果写入临时表就可以了
chinasg 2002-07-01
  • 打赏
  • 举报
回复
我把括号也带上了,自己再相应的修改一下字段
kuangning 2002-07-01
  • 打赏
  • 举报
回复
select 故障名称ID, count(记录标识ID),count (distinct 用户ID ) ,sum(修复时间) from l_reliability_data
group by 故障名称ID
naughtyboy 2002-07-01
  • 打赏
  • 举报
回复
gz
chinasg 2002-07-01
  • 打赏
  • 举报
回复
我把括号也带上了,字段名称自己修改一下。
chinasg 2002-07-01
  • 打赏
  • 举报
回复
SELECT a.*,b.* FROM
(SELECT 故障名称ID,COUNT(*) AS 故障次数,SUM([修复时间]-[故障时刻])
FROM l_reliability_data GROUP BY 故障名称ID) a,
(SELECT [故障名称ID],count(DISTINCT [记录标识ID]) AS 用户数
FROM l_reliability_data GROUP BY 故障名称ID) b
WHERE a.故障名称ID=b.故障名称ID
Mike_Ge 2002-07-01
  • 打赏
  • 举报
回复
select 故障名称ID,sum(故障次数) from 表名 group by 故障名称ID
chinasg 2002-07-01
  • 打赏
  • 举报
回复
SELECT a.*,b.* FROM
(SELECT 故障名称ID,COUNT(*) AS 故障次数,SUM([修复时间]-[故障时刻])
FROM l_reliability_data GROUP BY 故障名称ID) a,
(SELECT [故障名称ID],count(DISTINCT [记录标识ID]) AS 用户数
FROM l_reliability_data GROUP BY 故障名称ID) b
WHERE a.故障名称ID=b.故障名称ID
加载更多回复(9)

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧