请教多行合一行的sql语句

ycagri 2009-09-15 02:20:47
时间和编号相同:
ID STCD TM Z Q

1 S1 2009-08-10 08:00:00 12 null
2 S1 2009-08-10 08:00:00 null 25


输出为
ID STCD TM Z Q
1 S1 2009-08-10 08:00:00 12 25



...全文
258 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
小宏 2009-09-15
  • 打赏
  • 举报
回复
太抠了
哈哈。。。。
ycagri 2009-09-15
  • 打赏
  • 举报
回复
为什么会出现null值?
因为每个测站有5个指标,按5个指标为5列来建表,但采集的时候,指标是分开采集的,一次发送5个包的数据,依次insert进入数据库,没有update功能,所以这样的话,就形成一条记录只能有一个字段值,造成了其他字段为null

Z、Q都为decimal类型,2位小数

type为类型标识,如为1表示是Z,为2表示Q,为3表示F,为4表示CL。。。。。

这样虽然好处理,但显示的时候,我的Z\Q\F\CL。。。又是一行来显示,就会出现行列转置的问题


这两种方法都有优缺点


我想请问,还有没有更好的处理办法
黄_瓜 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ycagri 的回复:]
我想设计成

ID  STCD  TM  TYPE  DATA

用TYPE来区分是哪种类型的数据,但将来显示的时候,还需要行列转置,一样会影响效率

还有没有更好的处理办法?
[/Quote]
type是干什么的?你插入的时候为什么会有空值?要插入什么样的数据?
又要取什么样的结果,去的时候都是取得合并好的结果?没有取不是合并的结果
zhousq00 2009-09-15
  • 打赏
  • 举报
回复
如果Z和Q是int型的,3楼正解,看你的需求是要求最大值还是求和。
如果Z和Q是非int型的,就要用case了。
而且需要你把需求说清楚!
ycagri 2009-09-15
  • 打赏
  • 举报
回复
贴子加分了~~~~
ycagri 2009-09-15
  • 打赏
  • 举报
回复

我想设计成

ID STCD TM TYPE DATA

用TYPE来区分是哪种类型的数据,但将来显示的时候,还需要行列转置,一样会影响效率

还有没有更好的处理办法?
guguda2008 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ycagri 的回复:]
呵呵~~~~
我不知道我的表设计的是不是有问题,一张大表(5、6列),但插入的值是一个值一个值插入的,显示的时候又需要合成一行,这样的话,就造成的好多字段为null,不知道这样会造成什么影响?

浪费了磁盘空间?硬盘也不值钱
影响检索速度?null不知道会不会影响
[/Quote]
蛋帖。。。。
按你的说法表设计就是有点问题
黄_瓜 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ycagri 的回复:]
呵呵~~~~
我不知道我的表设计的是不是有问题,一张大表(5、6列),但插入的值是一个值一个值插入的,显示的时候又需要合成一行,这样的话,就造成的好多字段为null,不知道这样会造成什么影响?

浪费了磁盘空间?硬盘也不值钱
影响检索速度?null不知道会不会影响
[/Quote]
硬盘多便宜,该为空就得为空。。。。
要再问就得加分了
ycagri 2009-09-15
  • 打赏
  • 举报
回复
呵呵~~~~
我不知道我的表设计的是不是有问题,一张大表(5、6列),但插入的值是一个值一个值插入的,显示的时候又需要合成一行,这样的话,就造成的好多字段为null,不知道这样会造成什么影响?

浪费了磁盘空间?硬盘也不值钱
影响检索速度?null不知道会不会影响
黄_瓜 2009-09-15
  • 打赏
  • 举报
回复

回答个没分的问题 哎。。。。。。。。。。。。。

--> 测试数据:@tb
declare @tb table([ID] int,[STCD] varchar(2),[TM] datetime,[Z] int,[Q] int)
insert @tb
select 1,'S1','2009-08-10 08:00:00',12,null union all
select 2,'S1','2009-08-10 08:00:00',null,25

select min(ID), STCD, TM , sum( Z ) Z, sum( Q ) Q
from @tb
group by STCD, TM

/*
STCD TM Z Q
----------- ---- ----------------------- ----------- -----------
1 S1 2009-08-10 08:00:00.000 12 25


(1 行受影响)

*/
sgtzzc 2009-09-15
  • 打赏
  • 举报
回复
select min(ID) as ID,STCD,TM,max(Z) as Z,max(Q) as Q
from tb
group by STCD,TM
sgtzzc 2009-09-15
  • 打赏
  • 举报
回复
select ID,STCD,TM,max(Z) as Z,max(Q) as Q
from tb
group by ID,STCD,TM
黄_瓜 2009-09-15
  • 打赏
  • 举报
回复
sum

34,588

社区成员

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

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