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

请教以下SQL代码怎么在ASP中调用

2013-12-22 
请问以下SQL代码如何在ASP中调用if not object_id(N[入库表]) is nulldrop table [入库表]goCREATE TABL

请问以下SQL代码如何在ASP中调用

if not object_id(N'[入库表]') is null
drop table [入库表]
go
CREATE TABLE [入库表](产品代码 NVARCHAR(20),产品名称 NVARCHAR(20),产品型号 NVARCHAR(20), 入库数量 INT,入库单价 MONEY,入库时间 DATETIME)

INSERT 入库表 
select N'001',N'名称1',N'型号1',20,25,'2011-10-9' union all
select N'001',N'名称1',N'型号1',25,20,'2011-10-10' union all
select N'001',N'名称1',N'型号1',22,23.5,'2011-11-11' UNION ALL
select N'001',N'名称1',N'型号1',100,50,'2011-11-12'
GO
if not object_id(N'出库表') is null
drop table 出库表
Go
Create table 出库表([产品代码] nvarchar(3),[产品名称] nvarchar(3),[产品型号] nvarchar(3),[出库数量] int,[出库时间] Datetime)
Insert 出库表
select N'001',N'名称1',N'型号1',55,'2011-11-13'
Go
SELECT 
[产品代码],
[产品名称],
[出库时间],
SUM([数量]) AS [先出数量],
CAST( SUM([数量]*入库单价)/SUM([数量]) AS decimal(18,2) )AS [先出单价],
SUM([数量]*入库单价) AS 先出金额,
SUM(入库数量) AS 结存数量 ,
CAST(SUM(入库数量*入库单价)/SUM(入库数量)AS decimal(18,2) ) AS 结存单价, 
SUM(入库数量*入库单价) AS 结存金额
FROM 
(
SELECT 
a.[产品代码],
a.[产品名称],
b.[出库时间],
[数量]=CASE WHEN a.sumQty-a.入库数量 <b.sumQty then case  when   b.sumQty <a.sumQty   then   b.sumQty   else   a.sumQty   END -
case   when   b.sumQty-b.[出库数量] <a.sumQty-a.入库数量   then   a.sumQty-a.入库数量   else   b.sumQty-b.[出库数量] END
ELSE 0 end
,a.入库单价,
CASE WHEN (a.sumQty-a.入库数量) >b.sumQty  then a.入库数量  WHEN a.sumQty>b.sumQty THEN a.sumQty-b.sumQty  ELSE 0 END AS 入库数量

FROM (SELECT *,(SELECT sum(入库数量) FROM 入库表 WHERE 产品代码=a.产品代码 AND 入库时间<=a.入库时间 ) sumQty  FROM 入库表 AS a)a
left JOIN 
(SELECT *,(SELECT sum([出库数量]) FROM 出库表 WHERE 产品代码=a.产品代码 AND [出库时间]<=a.[出库时间] ) sumQty  FROM 出库表 AS a)b ON a.产品代码=b.产品代码
WHERE   
b.sumQty-b.[出库数量] <a.sumQty   
)T
GROUP BY 
[产品代码],
[产品名称],
[出库时间]

/*
产品代码产品名称出库时间先出数量先出单价先出金额结存数量结存单价结存金额
001名称12011-11-13 00:00:00.0005522.451235.0011247.165282.00
*/

[解决办法]
--先创建视图,这个的好处是能够把复杂的sql语句化为视图,直接访问视图
CREATE VIEW view_Storage
as
SELECT 
[产品代码],
[产品名称],
[出库时间],
SUM([数量]) AS [先出数量],
CAST( SUM([数量]*入库单价)/SUM([数量]) AS decimal(18,2) )AS [先出单价],
SUM([数量]*入库单价) AS 先出金额,
SUM(入库数量) AS 结存数量 ,
CAST(SUM(入库数量*入库单价)/SUM(入库数量)AS decimal(18,2) ) AS 结存单价, 
SUM(入库数量*入库单价) AS 结存金额
FROM 
(
SELECT 
a.[产品代码],
a.[产品名称],
b.[出库时间],
[数量]=CASE WHEN a.sumQty-a.入库数量 <b.sumQty then case  when   b.sumQty <a.sumQty   then   b.sumQty   else   a.sumQty   END -
case   when   b.sumQty-b.[出库数量] <a.sumQty-a.入库数量   then   a.sumQty-a.入库数量   else   b.sumQty-b.[出库数量] END
ELSE 0 end
,a.入库单价,
CASE WHEN (a.sumQty-a.入库数量) >b.sumQty  then a.入库数量  WHEN a.sumQty>b.sumQty THEN a.sumQty-b.sumQty  ELSE 0 END AS 入库数量

FROM (SELECT *,(SELECT sum(入库数量) FROM 入库表 WHERE 产品代码=a.产品代码 AND 入库时间<=a.入库时间 ) sumQty  FROM 入库表 AS a)a
left JOIN 
(SELECT *,(SELECT sum([出库数量]) FROM 出库表 WHERE 产品代码=a.产品代码 AND [出库时间]<=a.[出库时间] ) sumQty  FROM 出库表 AS a)b ON a.产品代码=b.产品代码
WHERE   
b.sumQty-b.[出库数量] <a.sumQty   
)T
GROUP BY 
[产品代码],
[产品名称],
[出库时间]

go


--ASP代码访问
select * from view_Storage where (条件表达式)


[解决办法]
这些建表的代码,先单独在sql server中运行:

if not object_id(N'[入库表]') is null 


    drop table [入库表]
    go
CREATE TABLE [入库表](产品代码 NVARCHAR(20),产品名称 NVARCHAR(20),产品型号 NVARCHAR(20), 入库数量 INT,入库单价 MONEY,入库时间 DATETIME)
 
INSERT 入库表 
select N'001',N'名称1',N'型号1',20,25,'2011-10-9' union all
select N'001',N'名称1',N'型号1',25,20,'2011-10-10' union all
select N'001',N'名称1',N'型号1',22,23.5,'2011-11-11' UNION ALL
select N'001',N'名称1',N'型号1',100,50,'2011-11-12'
GO
if not object_id(N'出库表') is null
    drop table 出库表
Go
Create table 出库表([产品代码] nvarchar(3),[产品名称] nvarchar(3),[产品型号] nvarchar(3),[出库数量] int,[出库时间] Datetime)
Insert 出库表
select N'001',N'名称1',N'型号1',55,'2011-11-13'
Go


[解决办法]
然后,在asp中只需运行,你的查询语句就可以了:

SELECT 
    [产品代码],
    [产品名称],
    [出库时间],
    SUM([数量]) AS [先出数量],
    CAST( SUM([数量]*入库单价)/SUM([数量]) AS decimal(18,2) )AS [先出单价],
    SUM([数量]*入库单价) AS 先出金额,
    SUM(入库数量) AS 结存数量 ,
    CAST(SUM(入库数量*入库单价)/SUM(入库数量)AS decimal(18,2) ) AS 结存单价, 
    SUM(入库数量*入库单价) AS 结存金额
FROM 
(
SELECT 
    a.[产品代码],
    a.[产品名称],
    b.[出库时间],
    [数量]=CASE WHEN a.sumQty-a.入库数量 <b.sumQty then case  when   b.sumQty <a.sumQty   then   b.sumQty   else   a.sumQty   END -
    case   when   b.sumQty-b.[出库数量] <a.sumQty-a.入库数量   then   a.sumQty-a.入库数量   else   b.sumQty-b.[出库数量] END
    ELSE 0 end
    ,a.入库单价,
    CASE WHEN (a.sumQty-a.入库数量) >b.sumQty  then a.入库数量  WHEN a.sumQty>b.sumQty THEN a.sumQty-b.sumQty  ELSE 0 END AS 入库数量
 
FROM (SELECT *,(SELECT sum(入库数量) FROM 入库表 WHERE 产品代码=a.产品代码 AND 入库时间<=a.入库时间 ) sumQty  FROM 入库表 AS a)a
left JOIN 
(SELECT *,(SELECT sum([出库数量]) FROM 出库表 WHERE 产品代码=a.产品代码 AND [出库时间]<=a.[出库时间] ) sumQty  FROM 出库表 AS a)b ON a.产品代码=b.产品代码
WHERE   
    b.sumQty-b.[出库数量] <a.sumQty   
)T
GROUP BY    
    [产品代码],
    [产品名称],
    [出库时间]

热点排行