表1
單號 品號 庫存數 日期
A001 as200 220 2005.04.06
A003 as210 0 2005.04.12
A003 as230 203 2005.04.18
A005 as230 240 2005.05.06
A006 as240 230 2005.05.25
怎麼按品號同時查詢 本月庫存和上月庫存?
如查詢2005年5月的結果如下:
品號 本月庫存數 上月庫存數
as200 220 0
as210 0 0
as230 240 203
....
要求用一條語句
------解决方案--------------------
CREATE TABLE tb([單號] varchar(10), [品號] varchar(10), [庫存數] INT, [日期] DATETIME)
INSERT INTO tb
SELECT 'A001 ', 'as200 ', 220, '2005.04.06 '
UNION ALL SELECT 'A003 ', 'as210 ', 0, '2005.04.12 '
UNION ALL SELECT 'A003 ', 'as230 ', 203, '2005.04.18 '
UNION ALL SELECT 'A005 ', 'as230 ', 240, '2005.05.06 '
UNION ALL SELECT 'A006 ', 'as240 ', 230, '2005.05.25 '
DECLARE @date DATETIME
SET @date = '2005/05/01 '
SELECT T.品號, 本月庫存數 = ISNULL((SELECT SUM(庫存數) FROM tb WHERE 品號 = T.品號 AND YEAR(日期) = YEAR(@date) AND MONTH(日期) = MONTH(@date)), 0)
, 上月庫存數 = ISNULL((SELECT SUM(庫存數) FROM tb WHERE 品號 = T.品號 AND YEAR(日期) = YEAR(DATEADD(MONTH, -1, @date)) AND MONTH(日期) = MONTH(DATEADD(MONTH, -1, @date))), 0)
FROM tb T
DROP TABLE tb
------解决方案--------------------
结果:
品號 本月庫存數 上月庫存數
---------- ----------- -----------
as200 0 220
as210 0 0
as230 240 203
as230 240 203
as240 230 0
------解决方案--------------------
declare @a table(單號 varchar(10),品號 varchar(10), 庫存數 int, 日期 datetime)
insert into @a
select 'A001 ', 'as200 ', 220 , '2005-04-06 '
union all
select 'A003 ', 'as210 ', 0 , '2005-04-12 '
union all
select 'A003 ', 'as230 ', 203 , '2005-04-18 '
union all
select 'A005 ', 'as230 ', 240 , '2005-05-06 '
union all
select 'A006 ', 'as240 ', 230 , '2005-05-25 '
select * from @a
select
[品號]
,sum(select [庫存數] from @a where datediff(month,[日期],getdate())=0 and T.[品號]=[品號]) as N '本月庫存數 '
,sum(select [庫存數] from @a where datediff(month,[日期],getdate())=-1 and T.[品號]=[品號]) as N '上月庫存數 '
from @a T
group by [品號]
------解决方案--------------------
select 品號
,isnull((select sum(isnull(庫存數,0)) from T1 where datediff(month,日期,getdate())=0 and T.品號=品號),0) as 上月結存
,isnull((select sum(isnull(庫存數,0)) from T1 where datediff(month,日期,getdate())=-1 and T.品號=品號),0) as 本月結存
from T1 T
------解决方案--------------------
declare @ta TABLE ([單號] varchar(10), [品號] varchar(10), [庫存數] INT, [日期] DATETIME)
INSERT INTO @ta
SELECT 'A001 ', 'as200 ', 220, '2005.04.06 '