当前位置:编程学习 > C#/ASP.NET >>

C# SQL语句显示 数据问题

想把元件表的内容全部显示出来。 对多个  出库 入库 

如果 没入库 则显示 0,没出库 则显示0,对应元件,也就是元件 表内容    全显示出来。 

现在出来一个问题。
如果时间段查询  不符合出库 入库 的记录的 就不显示了,
我想让 显示全部 元件数据,  时间段查询不到的 记录  就 显示 0 或者NULL 改如何做。 


表结构 
元件 
入库出库 



执行 
SELECT g.*,h.出库总数,h.出库总价,g.入库总价-h.出库总价 as YuE from 


(SELECT a.OrganID,a.OrganName,SUM(ISNULL(c.InCount,0)) AS 入库总数 

,SUM(ISNULL(c.InPri * c.InCount,0)) AS 入库总价,e.OrCount AS 库存总数 
FROM 
dbo.Organ a JOIN dbo.Storage e ON a.OrganID = e.OrganID 
LEFT JOIN dbo.InBase c ON a.OrganID = c.OrganID 
WHERE 
CONVERT(CHAR(10),ISNULL(InDate,'2009-07-22'),121)>='2009-07-22' 

and CONVERT(CHAR(10),ISNULL(InDate,'2009-07-22'),121) <='2009-07-22' 
GROUP BY a.OrganID,a.OrganName,e.OrCount) g 

INNER JOIN 

(SELECT a.OrganID,SUM(ISNULL(d.OutCount,0)) AS  出库总数,SUM 

(ISNULL(d.OutPri *d.OutCount ,0)) AS 出库总价 

FROM 
dbo.Organ a Left JOIN 
dbo.OutBase d ON a.OrganID = d.OrganID 
WHERE 
CONVERT(CHAR(10),ISNULL(OutDate,'2009-07-22'),121)>='2009-07-22' 

and CONVERT(CHAR(10),ISNULL(OutDate,'2009-07-22'),121) <='2009-07-22' 
GROUP BY a.OrganID,a.OrganName) h  ON g.OrganID=h.OrganID 


实际的结果,不符合日期要求的 不显示 了(我想都显示  出库入库都为0)



我想要的结果就是 

把 organ表中的 名称全显示出来。如果不符合日期要求的  ,用 0代替 。 


比如 OrganID 为 62 在指定 时间段内 没如过库也没出过库,所以就查找不出来记录。我想让指定时间段没入也没出过库的记录 全显示    但入库出哭数量价格等为 0






请问如何修改这条SQL语句 。。。












再比如

AA 
BB 
CC 
DD 
EE 

AA没入或 出过库  ,BB没入 出过库 

CC DD EE 分别 2009-7-11  12 13 日入过库 

如果  我 把时间段 定成  7-10 到 7-22  查询,就会有以下结果 
品名        入库    出库  
AA            0      0      
BB          0      0 
CC            1      1    
DD            1      1 
EE            11    1 
没问题 


如果 时间段 定义为 2009-7-19 到 2009-7-19  这时候 会因为时间不符合条件 而不显示记录 
就会只显示 
品名        入库    出库  
AA            0      0      
BB          0      0 


这时候 我要的效果是 
品名        入库    出库  
AA            0      0      
BB          0      0 
CC            0      0    
DD            0      0 
EE            0    0 
就这意思 --------------------编程问答-------------------- 看你的描述应该是要用外连接 把INNER JOIN 改成LEFT OUTER JOIN或者RIGHT OUTER JOIN试试看 --------------------编程问答-------------------- 不成,INNER JOIN 是连接两个 查询数据和,左右 都一样。

说白了,就是把时间 段内 查询不到的数据 也显示出来

但是 总数 和 总价 都为 0 了,因为这个时间段 没入库也没出库 ,所以数量也就是0了。


--------------------编程问答-------------------- 在SQL里面可以先把organ表的数据和日期区间外连接 不过好像有点麻烦 不如在程序里面写了 --------------------编程问答-------------------- up --------------------编程问答-------------------- 帮顶~~~~~ --------------------编程问答-------------------- 具体 实现难么? --------------------编程问答-------------------- WHERE 
CONVERT(CHAR(10),ISNULL(OutDate,'2009-07-22'),121)>='2009-07-22' 

and CONVERT(CHAR(10),ISNULL(OutDate,'2009-07-22'),121) <='2009-07-22' 
GROUP BY a.OrganID,a.OrganName) h  ON g.OrganID=h.OrganID 

这个where子句后加上
union all 
select a.OrganID,a.OrganName, 0, 0.0, 0, 0, 0.0, 0.0 from a 
where CONVERT(CHAR(10),ISNULL(OutDate,'2009-07-22'),121)<'2009-07-22' 

or CONVERT(CHAR(10),ISNULL(OutDate,'2009-07-22'),121) >'2009-07-22' 
--------------------编程问答-------------------- 漏了半句,再接上GROUP BY a.OrganID,a.OrganName --------------------编程问答-------------------- 不管有没有都要显示的话,用full join得了 --------------------编程问答--------------------
SELECT A.品名,B.入库,B.出库

FROM TB A

LEFT JOIN 

(SELECT * FROM TB WHERE 入库=0 AND   出库=0) AS B

ON A.品名=B.品名
--------------------编程问答-------------------- full join 不行,
因为是 有条件的。没条件的可以
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,