我要写一个SQL语句,要实现:存在原料入库表,原料出库表,各有 材料编号,入(出)库时间,入(出)库号(主码),入(出)数量,入(出)仓库编号,要在这两张表中按时间输出信息,格式如下:材料编号 时间 入库数量 入库仓库号 出库数量 出库仓库号 时间为入库时间=出库时间时,但是也可能存在情况(入(出)库时间不存在,只有一个时间)即当日只有入或者出库,同时出(入)数量为0.help me!!~~

解决方案 »

  1.   

    select 材料编号 时间 入库数量 入库仓库号 出库数量 出库仓库号 from 原料入库表,原料出库表 where 入库时间=出库时间 and 原料入库表.材料编号 = 原料出库表.材料编号
      

  2.   


    CREATE TABLE [dbo].[原料入库表] (
    [材料号] [char] (6) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [入库时间] [datetime] NOT NULL ,
    [入库数量] [int] NOT NULL ,
    [操作员序号] [char] (4) COLLATE Chinese_PRC_CI_AS NULL ,
    [对应流水号] [char] (6) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [仓库号] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [入库号] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL 
    ) ON [PRIMARY]
    GOCREATE TABLE [dbo].[原料出库表] (
    [材料号] [char] (6) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [出库时间] [datetime] NULL ,
    [出库数量] [int] NOT NULL ,
    [操作员序号] [char] (4) COLLATE Chinese_PRC_CI_AS NULL ,
    [仓库号] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [出库号] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [审核标志] [smallint] NOT NULL ,
    [出库标志] [smallint] NOT NULL ,
    [领料员序号] [char] (4) COLLATE Chinese_PRC_CI_AS NULL ,
    [申请时间] [datetime] NULL 
    ) ON [PRIMARY]
    GO材料编号 时间 入库数量 入库仓库号 出库数量 出库仓库号 
    因为同一天内可能出入库好几次,就要按时间把入库数量,出库数量 加起来
      

  3.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)

       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  4.   

    先按时间分组(group by),然后把每个组的入库数量和出库数量各自相加(count)。。
    不知道对不对.
      

  5.   

    先按时间分组(group by),然后把每个组的入库数量和出库数量各自相加(sum)。。 
    不知道对不对.
      

  6.   

    select 材料编号 时间 sum(入库数量) 入库仓库号 sum(出库数量) 出库仓库号 from 原料入库表,原料出库表 where 入库时间=出库时间 and 原料入库表.材料编号 = 原料出库表.材料编号 group by 时间
      

  7.   

    case when (name IS NULL or name='') then 0 else name end
      

  8.   

    SQL codeselect 原料入库表.材料编号 时间sum(入库数量) 入库仓库号sum(出库数量) 出库仓库号from 原料入库表,原料出库表where 入库时间=出库时间and 原料入库表.材料编号= 原料出库表.材料编号group by 时间 
      

  9.   

    服务器: 消息 8120,级别 16,状态 1,行 11
    列 '原料入库表.材料号' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
    服务器: 消息 8120,级别 16,状态 1,行 11
    列 '原料出库表.材料号' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
    服务器: 消息 8120,级别 16,状态 1,行 11
    列 '原料出库表.出库时间' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
    服务器: 消息 8120,级别 16,状态 1,行 11
    列 '原料入库表.仓库号' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
    服务器: 消息 8120,级别 16,状态 1,行 11
    列 '原料出库表.仓库号' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
      

  10.   

    create table 原料入库表(
      材料号 char(6) not null
     入库时间 datetime NOT NULL ,
     入库数量 int NOT NULL ,
     仓库号 varchar(10) not null,
     入库号 char (10)  NOT NULL,
     constraint pk_库存表 primary key(入库号) 
    ) create table 原料出库表(
     材料号 char(6) not null
     出库时间 datetime NOT NULL ,
     出库数量 int NOT NULL ,
     仓库号 varchar(10) not null,
     出库号 char (10)  NOT NULL,
     constraint pk_库存表 primary key(出库号 ) 
    ) 要得到类似这样的表格:
    材料号    时间        入库数量   出库数量  
    01      2010-1-24        30          10      
    02      2010-1-24        0           10      
    03      2010-1-24        20          0
    01      2010-1-25        0           10      
    02      2010-1-25        0           10      
    03      2010-1-25        20          0因为同一天内会有多次的出入库,或者只有出库或者入库.而且也可能从不同的仓库操作.
      

  11.   


    select coalesce(t1.材料号,t2.材料号) 材料号, coalesce(t1.时间,t2.时间) 时间,
    isnull(t1.入库数量,0) 入库数量, isnull(t2.出库数量,0) 出库数量
    from 
    (select 材料号,时间,sum(入库数量) 入库数量 from 原料入库表 group by 材料号,时间) t1 
    full outer join 
    (select 材料号,时间,sum(出库数量) 出库数量 from 原料入库表  group by 材料号,时间) t2
    on t1. 材料号=t2.材料号 and t1.时间=t2.时间
      

  12.   


    create table 原料入库表( 
      材料号 char(6) not null ,
    入库时间 datetime NOT NULL , 
    入库数量 int NOT NULL , 
    仓库号 varchar(10) not null, 
    入库号 char (10)  NOT NULL, 
    primary key(入库号) 
    ) create table 原料出库表( 
    材料号 char(6) not null ,
    出库时间 datetime NOT NULL , 
    出库数量 int NOT NULL , 
    仓库号 varchar(10) not null, 
    出库号 char (10)  NOT NULL, 
    primary key(出库号 ) 

    insert into 原料入库表 values('111',getdate(),100,'A01','B01')
    insert into 原料入库表 values('111',getdate(),200,'A02','B02')
    insert into 原料入库表 values('112',getdate(),100,'A01','B05')
    insert into 原料入库表 values('113',getdate(),100,'A01','B06')
    insert into 原料入库表 values('111',dateadd(dd,1,getdate()),50,'A01','B03')
    insert into 原料入库表 values('113',dateadd(dd,1,getdate()),350,'A01','B04')
    insert into 原料出库表 values('111',getdate(),50,'A01','C01')
    insert into 原料出库表 values('111',getdate(),150,'A02','C02')
    insert into 原料出库表 values('115',getdate(),100,'A01','C05')
    insert into 原料出库表 values('113',getdate(),100,'A01','C06')
    insert into 原料出库表 values('111',dateadd(dd,-1,getdate()),50,'A01','C03')
    insert into 原料出库表 values('117',dateadd(dd,-1,getdate()),350,'A01','C04')
    select '材料号' = case when isnull(原料入库表.材料号,'') = '' then 原料出库表.材料号 else 原料入库表.材料号 end,
           '时间' = case when isnull(原料入库表.入库时间,'') = '' then convert(char(10),原料出库表.出库时间,120) 
                             else convert(char(10),原料入库表.入库时间,120) end,
           '入库数量' = isnull(入库数量,0),
           '入库仓库号' = isnull(原料入库表.仓库号,''),
           '出库数量' = isnull(出库数量,0),
           '出库仓库号' = isnull(原料出库表.仓库号,'')
    from 原料入库表 full outer join 原料出库表
    on 原料入库表.材料号 = 原料出库表.材料号
       and convert(char(10),入库时间,120) = convert(char(10),出库时间,120)
       and 原料入库表.仓库号 = 原料出库表.仓库号
    order by 材料号,时间