时间和编号相同:
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

解决方案 »

  1.   

    select ID,STCD,TM,max(Z) as Z,max(Q) as Q
    from tb
    group by  ID,STCD,TM
      

  2.   

    select min(ID) as ID,STCD,TM,max(Z) as Z,max(Q) as Q
    from tb
    group by  STCD,TM
      

  3.   


    回答个没分的问题 哎。--> 测试数据:@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,25select 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 行受影响)*/
      

  4.   

    呵呵~~~~
    我不知道我的表设计的是不是有问题,一张大表(5、6列),但插入的值是一个值一个值插入的,显示的时候又需要合成一行,这样的话,就造成的好多字段为null,不知道这样会造成什么影响?浪费了磁盘空间?硬盘也不值钱
    影响检索速度?null不知道会不会影响
      

  5.   


    我想设计成ID  STCD  TM  TYPE   DATA用TYPE来区分是哪种类型的数据,但将来显示的时候,还需要行列转置,一样会影响效率还有没有更好的处理办法?
      

  6.   

    如果Z和Q是int型的,3楼正解,看你的需求是要求最大值还是求和。
    如果Z和Q是非int型的,就要用case了。
    而且需要你把需求说清楚!
      

  7.   

    type是干什么的?你插入的时候为什么会有空值?要插入什么样的数据?
    又要取什么样的结果,去的时候都是取得合并好的结果?没有取不是合并的结果
      

  8.   

    为什么会出现null值?
    因为每个测站有5个指标,按5个指标为5列来建表,但采集的时候,指标是分开采集的,一次发送5个包的数据,依次insert进入数据库,没有update功能,所以这样的话,就形成一条记录只能有一个字段值,造成了其他字段为nullZ、Q都为decimal类型,2位小数type为类型标识,如为1表示是Z,为2表示Q,为3表示F,为4表示CL。。这样虽然好处理,但显示的时候,我的Z\Q\F\CL又是一行来显示,就会出现行列转置的问题
    这两种方法都有优缺点
    我想请问,还有没有更好的处理办法