接(主题:在线等!急 作者: yydy (游泳的鱼) )

yydy 2003-05-22 09:59:58
接(主题:在线等!急 作者: yydy (游泳的鱼) )

项目A
测点 日期 值
tadd tdate tval
c 2003-1-5 6.5
c 2003-1-5 2.8
c 2003-1-5 7.2
c 2003-1-6 6.5
c 2003-1-6 2.8
c 2003-1-6 7.2
c 2003-1-7 6.5
c 2003-1-7 2.8
c 2003-1-7 7.2
c 2003-1-8 6.5
c 2003-1-8 2.8
c 2003-1-8 7.2
c 2003-1-9 6.3
c 2003-1-9 9.8
c 2003-1-9 2.5
d 2003-1-5 4.3
d 2003-1-5 7.1
d 2003-1-5 4.3
d 2003-1-6 4.3
d 2003-1-6 7.1
d 2003-1-6 4.3
d 2003-1-7 4.3
d 2003-1-7 7.1
d 2003-1-7 4.3

项目B
测点 日期 值
tadd tdate tval
c 2003-1-5 6.5
c 2003-1-5 2.8
c 2003-1-5 7.2
c 2003-1-6 6.5
c 2003-1-6 2.8
c 2003-1-6 7.2
c 2003-1-7 6.5
c 2003-1-7 2.8
c 2003-1-7 7.2
c 2003-1-8 6.5
c 2003-1-8 2.8
c 2003-1-8 7.2
c 2003-1-9 6.3
c 2003-1-9 9.8
c 2003-1-9 2.5
d 2003-1-5 4.3
d 2003-1-5 7.1
d 2003-1-5 4.3
d 2003-1-6 4.3
d 2003-1-6 7.1
d 2003-1-6 4.3
d 2003-1-7 4.3
d 2003-1-7 7.1
d 2003-1-7 4.3

项目C
测点 日期 值
tadd tdate tval Pa Fx
c 2003-1-5 6.5 0 N
c 2003-1-5 2.8 0 N
c 2003-1-5 7.2 0 N
c 2003-1-6 6.5 0 NE
c 2003-1-6 2.8 0 NE
c 2003-1-6 7.2 0 NE
c 2003-1-7 6.5 0 S
c 2003-1-7 2.8 0 S
c 2003-1-7 7.2 0 S
c 2003-1-8 6.5 0 WS
c 2003-1-8 2.8 0 WS
c 2003-1-8 7.2 0 WS
c 2003-1-9 6.3 0 W
c 2003-1-9 9.8 0 W
c 2003-1-9 2.5 0 W
d 2003-1-5 4.3 0 N
d 2003-1-5 7.1 0 N
d 2003-1-5 4.3 0 N
d 2003-1-6 4.3 0 E
d 2003-1-6 7.1 0 E
d 2003-1-6 4.3 0 E
d 2003-1-7 4.3 0 WN
d 2003-1-7 7.1 0 WN
d 2003-1-7 4.3 0 WN

按月份统计

项目A 均值 项目B 均值 项目C 均值 Pa Fx
c 2003-1-5 6.3 4.8 7.2 6.1 6.3 4.8 7.2 6.1 6.3 4.8 7.2 6.1 0 N
c 2003-1-6 6.3 9.7 2.5 6.5 6.3 9.7 2.5 6.5 6.3 9.7 2.5 6.5 0 NE
c 2003-1-7 8.0 3.6 4.3 5.3 8.0 3.6 4.3 5.3 8.0 3.6 4.3 5.3 0 S
c 2003-1-8 6.3 9.7 2.5 6.5 6.3 9.7 2.5 6.5 6.3 9.7 2.5 6.5 0 WS
c 2003-1-9 8.0 3.6 4.3 5.3 8.0 3.6 4.3 5.3 8.0 3.6 4.3 5.3 0 W
均值 7 6 4.7 6 7 6 4.7 6 7 6 4.7 6 0 NULL

项目A 均值 项目B 均值 项目C 均值
d 2003-1-5 6.3 4.8 7.2 6.1 6.3 4.8 7.2 6.1 6.3 4.8 7.2 6.1 0 N
d 2003-1-6 6.3 9.7 2.5 6.5 6.3 9.7 2.5 6.5 6.3 9.7 2.5 6.5 0 E
d 2003-1-7 8.0 3.6 4.3 5.3 8.0 3.6 4.3 5.3 8.0 3.6 4.3 5.3 0 WN
均值 7 6 4.7 6 7 6 4.7 6 7 6 4.7 6 0 NULL

总平均值 7 6 4.7 6 7 6 4.7 6 7 6 4.7 6 0 NULL

各位能否就关键词或语句解释一下啊,谢谢了 我翻了三本书了,不大清楚
如:
select *,(select cast((sum(1)-0.5)/3 as int)+1 from #datatable where tdate<=tem.tdate and tadd=tem.tadd) lb
,1 as a into # from #datatable tem

单独一个#的含义
IDENTITY(int,1,1) id 意义用途
每个临时表的用途 解决这样问题的思路
真的很麻烦了
开两个帖子吧









...全文
70 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yydy 2003-05-22
  • 打赏
  • 举报
回复
刚吃完午饭,来瞧瞧
pengdali 2003-05-22
  • 打赏
  • 举报
回复
关于 #,##,@

http://expert.csdn.net/Expert/TopicView1.asp?id=1384381
yydy 2003-05-22
  • 打赏
  • 举报
回复
回复人: caiyunxia(monkey) ( ) 信誉:101 2003-05-21 21:11:00 得分:0


create table #datatable(tadd varchar(10),tdate datetime,tval numeric(8,1))
set nocount on
insert #datatable values( 'c', ' 2003-1-5', 6.5)
insert #datatable values( 'c', ' 2003-1-5', 2.8)
insert #datatable values( 'c', ' 2003-1-5', 7.2)
insert #datatable values( 'c', ' 2003-3-5', 6.3)
insert #datatable values( 'c', ' 2003-3-5', 9.8)
insert #datatable values( 'c', ' 2003-3-5', 2.5)
insert #datatable values( 'c', ' 2003-4-5', 9.2)
insert #datatable values( 'c', ' 2003-4-5', 3.6)
insert #datatable values( 'c', ' 2003-4-5', 4.3)
insert #datatable values( 'd', ' 2003-2-5', 7.1)
insert #datatable values( 'd', ' 2003-2-5', 4.3)
insert #datatable values( 'd', ' 2003-3-5', 8.5)


select *,(select cast((sum(1)-0.5)/3 as int)+1 from #datatable where tdate<=tem.tdate and tadd=tem.tadd) lb
,1 as a into # from #datatable tem

DECLARE @a INT,@tdate datetime,@lb int,@tadd varchar(10)
SET @a=0
UPDATE # SET @a=CASE WHEN @tadd=tadd and @tdate=tdate and @lb=lb THEN @a+1 ELSE isnull(a,0) END
,@tadd=CASE WHEN @tadd=tadd THEN @tadd ELSE tadd END
,a=@a,@tdate=CASE WHEN @tdate=tdate THEN @tdate ELSE tdate END
,@lb=CASE WHEN @lb=lb THEN @lb ELSE lb END
FROM #

select tadd,tdate,
sum(case when a=1 then tval end) d1,
isnull(sum(case when a=2 then tval end),0) d2,
isnull(sum(case when a=3 then tval end),0) d3
into #temp1 from # group by tadd,lb,tdate

select case when type=2 then tadd+'均值' else tadd end as tadd,
case when type=2 then null else tdate end as tdate,
D1,D2,D3 from (select *,type=1 from #temp1
union select tadd,tdate=max(tdate),
avg(D1) as D1,avg(D2) as D2,avg(D3) as D3,Type=2
from #temp1 group by tadd
) as tmp
order by tadd,tdate,Type

set nocount off
drop table #
drop table #datatable
看的我晕啊
能给讲讲么 :)
pengdali 2003-05-22
  • 打赏
  • 举报
回复
IDENTITY(函数)
只用在带有 INTO table 子句的 SELECT 语句中,以将标识列插入到新表中。

尽管类似,但是 IDENTITY 函数不是与 CREATE TABLE 和 ALTER TABLE 一起使用的 IDENTITY 属性。

语法
IDENTITY ( data_type [ , seed , increment ] ) AS column_name

参数
data_type

标识列的数据类型。标识列的有效数据类型可以是任何整数数据类型分类的数据类型(bit 数据类型除外),也可以是 decimal 数据类型。

seed

要指派给表中第一行的值。给每一个后续行指派下一个标识值,该值等于上一个 IDENTITY 值加上 increment 值。如果既没有指定 seed,也没有指定 increment,那么它们都默认为 1。

increment

用来添加到 seed 值以获得表中连续行的增量。

column_name

将插入到新表中的列的名称。

返回类型
返回与 data_type 相同的类型。

注释
因为该函数在表中创建一个列,所以必须用下列方式中的一种在选择列表中指定该列的名称:

--(1)
SELECT IDENTITY(int, 1,1) AS ID_Num
INTO NewTable
FROM OldTable

--(2)
SELECT ID_Num = IDENTITY(int, 1, 1)
INTO NewTable
FROM OldTable

示例
下面的示例将来自 pubs 数据库中 employee 表的所有行都插入到名为 employees 的新表。使用 IDENTITY 函数在 employees 表中从 100 而不是 1 开始编标识号。

USE pubs
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'employees')
DROP TABLE employees
GO
EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'true'

SELECT emp_id AS emp_num,
fname AS first,
minit AS middle,
lname AS last,
IDENTITY(smallint, 100, 1) AS job_num,
job_lvl AS job_level,
pub_id,
hire_date
INTO employees
FROM employee
GO
USE pubs
EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'false'

愉快的登山者 2003-05-22
  • 打赏
  • 举报
回复
单独一个#的含义:也是一个临时表名叫#
IDENTITY(int,1,1) id 意义用途:增加一个自增数据项ID,做为记录的标号,从1开始
Happiness 2003-05-22
  • 打赏
  • 举报
回复
>>单独一个#的含义
一个好玩的临时表,实际和#a一样

〉〉IDENTITY(int,1,1) id 意义用途
产生自增长字段

〉〉每个临时表的用途
〉〉解决这样问题的思路
需要慢慢体会
yydy 2003-05-22
  • 打赏
  • 举报
回复
休息一下,再来结帖
caiyunxia 2003-05-22
  • 打赏
  • 举报
回复
select *,(select cast((sum(1)-0.5)/3 as int)+1 from #datatable where tdate<=tem.tdate and tadd=tem.tadd) lb
,1 as a into # from #datatable tem
按tdate 、tadd分组,每三个一组,插入临时表#
DECLARE @a INT,@tdate datetime,@lb int,@tadd varchar(10)
SET @a=0
UPDATE # SET @a=CASE WHEN @tadd=tadd and @tdate=tdate and @lb=lb THEN @a+1 ELSE isnull(a,0) END
,@tadd=CASE WHEN @tadd=tadd THEN @tadd ELSE tadd END
,a=@a,@tdate=CASE WHEN @tdate=tdate THEN @tdate ELSE tdate END
,@lb=CASE WHEN @lb=lb THEN @lb ELSE lb END
FROM #
修改每一组的编号(从1开始,最多为三)

yydy 2003-05-22
  • 打赏
  • 举报
回复
基本解决 送分

解决这样问题的思路能讲一讲么
以这个为例
用逆推法 呵呵
caiyunxia 2003-05-22
  • 打赏
  • 举报
回复
还没有解决?

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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