首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么得到这样的日期(量够日期)

2012-03-12 
如何得到这样的日期(量够日期)?T1:产品计划数量-----------------A600B800T2:产品日期实际数量-----------

如何得到这样的日期(量够日期)?
T1:

产品 计划数量
-----------------
A 600
B 800


T2:

产品 日期 实际数量
-----------------------
A 1.1 300
A 1.2 400
A 1.3 200
B 1.1 300
B 1.2 300
B 1.3 300


如何根据以上两个表得到下列结果?

产品 量够日期
-----------------
A 1.2
B 1.3

[解决办法]

SQL code
--> 测试数据: @T1declare @T1 table (产品 varchar(1),计划数量 int)insert into @T1select 'A',600 union allselect 'B',800declare @T2 table (产品 varchar(1),日期 numeric(2,1),实际数量 int)insert into @T2select 'A',1.1,300 union allselect 'A',1.2,400 union allselect 'A',1.3,200 union allselect 'B',1.1,300 union allselect 'B',1.2,300 union allselect 'B',1.3,300;with maco as(select b.产品,日期,实际数量和=(select sum(实际数量) from @T2 where 产品=b.产品 and 日期<=b.日期),a.计划数量from @T2 b left join @T1 a on a.产品=b.产品 )select 产品,min(日期) as 量够日期 from maco where 实际数量和>计划数量 group by 产品/*产品   量够日期---- ---------------------------------------A    1.2B    1.3*/
[解决办法]
SQL code
------------------------------ Author  :fredrickhu(小F,向高手学习)-- Date    :2012-02-03 16:37:24-- Version:--      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (Intel X86) --    Apr 22 2011 11:57:00 --    Copyright (c) Microsoft Corporation--    Enterprise Evaluation Edition on Windows NT 6.1 <X64> (Build 7600: ) (WOW64)--------------------------------> 测试数据:[T1]if object_id('[T1]') is not null drop table [T1]go create table [T1]([产品] varchar(1),[计划数量] int)insert [T1]select 'A',600 union allselect 'B',800--> 测试数据:[t2]if object_id('[t2]') is not null drop table [t2]go create table [t2]([产品] varchar(1),[日期] numeric(2,1),[实际数量] int)insert [t2]select 'A',1.1,300 union allselect 'A',1.2,400 union allselect 'A',1.3,200 union allselect 'B',1.1,300 union allselect 'B',1.2,300 union allselect 'B',1.3,300--------------开始查询--------------------------;with f as(select 产品,日期,数量=(select sum(实际数量) from t2 where 产品=t.产品 and 日期<=t.日期) from t2 t)select   a.产品,b.日期from  T1 across apply  (select top 1 日期 from f where 数量>=计划数量 and 产品=a.产品)b----------------结果----------------------------/* 产品   日期---- ---------------------------------------A    1.2B    1.3(2 行受影响)*/
[解决办法]
SQL code
--T1:--产品 计划数量---------------------A 600--B 800--T2:--产品 日期 实际数量---------------------------A 1.1 300--A 1.2 400--A 1.3 200--B 1.1 300--B 1.2 300--B 1.3 300--如何根据以上两个表得到下列结果?--产品 量够日期---------------------A 1.2--B 1.3if OBJECT_ID('T1')is not null drop table T1go create table T1 (产品 varchar(50),计划数量 int)insert into T1 SELECT 'A',600 UNION ALLSELECT 'B',800  if OBJECT_ID('T2')is not null drop table T2go create table T2 (产品 varchar(50),日期 decimal(18,1),实际数量 int)insert into T2  SELECT 'A',1.1,300 UNION ALLSELECT 'A',1.2,400 UNION ALLSELECT 'A',1.3,200 UNION ALLSELECT 'B',1.1,300 UNION ALLSELECT 'B',1.2,300 UNION ALLSELECT 'B',1.3,300           --如何根据以上两个表得到下列结果?--产品 量够日期---------------------A 1.2--B 1.3             select a.产品,min(b.日期) as 日期 from T1 a left join  (select 产品,日期,数量=(select sum(实际数量) from t2 where 产品=t.产品 and 日期<=t.日期) from t2 t)b  on a.产品=b.产品 and a.计划数量<b.数量  group by a.产品,a.计划数量 产品                                                 日期-------------------------------------------------- ---------------------------------------A                                                  1.2B                                                  1.3(2 行受影响) 

热点排行