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.出库--------------------编程问答-------------------- full join 不行,
FROM TB A
LEFT JOIN
(SELECT * FROM TB WHERE 入库=0 AND 出库=0) AS B
ON A.品名=B.品名
因为是 有条件的。没条件的可以
补充:.NET技术 , C#