(
select * from
(
/*庫別中品號資料*/
select TAICON_TA.TA001 as T01,TAICON_TA.TA002 as T02,TAICON_TA.TA006 as T03
from TAICON_TA,TAICON_TB,INPUT_A,INPUT_B
where INPUT_B.B002 =TAICON_TA.TA001 and TAICON_TA.TA006=TAICON_TB.TB002 and TAICON_TB.TB003='5' and INPUT_A.A001=INPUT_B.B001 and INPUT_A.A012=INPUT_B.B006 and INPUT_A.A002='1' and ( INPUT_A.A014='[2]107待處理品倉')
group by TAICON_TA.TA006,TAICON_TA.TA001,TAICON_TA.TA002,TAICON_TB.TB001
/*order by TAICON_TB.TB001,TAICON_TA.TA001*/
)a left join
/*上月結存*/
( select INPUT_B.B002,isnull((SUM(INPUT_B.B005)-SUM(INPUT_B.B007)+SUM(INPUT_B.B009)),0) as T04
from INPUT_A,INPUT_B
where INPUT_A.A001=INPUT_B.B001 and INPUT_A.A012=INPUT_B.B006 and INPUT_A.A002='1' and INPUT_A.A008 < '2007.03.00'
group by INPUT_B.B002
)
b on a.T01=b.B002
)c left join
(
/*本月結存*/
select INPUT_B.B002,isnull(SUM(INPUT_B.B005),0) as X01,isnull(SUM(INPUT_B.B007),0) AS X02,isnull(SUM(INPUT_B.B009),0) as X03,isnull((SUM(INPUT_B.B005)-SUM(INPUT_B.B007)+SUM(INPUT_B.B009)),0) as X04
from INPUT_A,INPUT_B
where INPUT_A.A001=INPUT_B.B001 and INPUT_A.A012=INPUT_B.B006 and INPUT_A.A002='1' and INPUT_A.A008 like '2007.03.%'
group by INPUT_B.B002
)d on c.T01= d.B002
where ((T04+X01+X02+X03+X04)<>0)
order by T01
/*where ((T04+X01+X02+X03+X04)<>0)這一句的作用是不顯示T04,X01,X02,X03,X04都為0或Null的結果.但T04有的值不為0的也給排除了,奇怪.
如下面沒有加Where語句後顯示的結果%/
品 號 品 名 尺 寸 上月結存 本月入庫(全) 本月出庫(全) 本月調整(全) 結存數
TAQ2D151MA18250LL3 TAQ 200V 150uF ML 18x25 990 0 0 0 990
TAQ2D331MK1835MLL3 TAQ 200V 330uF ML 18x35.5 0 125,378 118,567 0 6,811
TAQ2D470MA12200LL5 TAQ 200V 47uF ML 12.5x20 336 0 0 0 336
TAQ2D471MK18400LL3 TAQ 200V 470uF ML 18x40 11,071 81,726 88,126 0 4,671
TAQ2D471YK18400LL3 TAQ 200V 470uF YL 18x40 0 3,105 2,400 0 705
TAQ2G100MK1012MLL3 TAQ 400V 10uF ML 10x12.5 206,297 0 0 0 206,297
TAQ2G100MK10160RC3 TAQ 400V 10uF MR 10x16 97,963 0 0 0 97,963
TAQ2G101MK1631MLL3 TAQ 400V 100uF ML 16x31.5 2,723 11,491 0 0 14,214
/*加了where ((T04+X01+X02+X03+X04)<>0)後顯示:*/
TAQ2D331MK1835MLL3 TAQ 200V 330uF ML 18x35.5 0 125,378 118,567 0 6,811
TAQ2D471MK18400LL3 TAQ 200V 470uF ML 18x40 11,071 81,726 88,126 0 4,671
TAQ2D471YK18400LL3 TAQ 200V 470uF YL 18x40 0 3,105 2,400 0 705
TAQ2G100MK1012MLL3 TAQ 400V 10uF ML 10x12.5 206,297 0 0 0 206,297
TAQ2G100MK10160RC3 TAQ 400V 10uF MR 10x16 97,963 0 0 0 97,963
TAQ2G101MK1631MLL3 TAQ 400V 100uF ML 16x31.5 2,723 11,491 0 0 14,214
/*有兩條(1,3條)不見了*/
8 个解决方案
#1
看看將每個元素都加上isnull()
where ((isnull(T04,0)+isnull(X01,0)+isnull(X02,0)+isnull(X03,0)+isnull(X04,0))<>0)
另外,你select 里的結存數 最好也寫成這樣
where ((isnull(T04,0)+isnull(X01,0)+isnull(X02,0)+isnull(X03,0)+isnull(X04,0))<>0)
另外,你select 里的結存數 最好也寫成這樣
#2
where ((T04+X01+X02+X03+X04)<>0)
这样写会出问题的,只要有一个值为null,所有的值相加后都为null
因为where 语句不和null记录做比较,所以只要为null的记录都不出来
这样写会出问题的,只要有一个值为null,所有的值相加后都为null
因为where 语句不和null记录做比较,所以只要为null的记录都不出来
#3
但現在目前的情況是,上面查詢的幾條記錄中
第一條的"上月結存"是990 但也給排除掉了
第一條的"上月結存"是990 但也給排除掉了
#4
拼接字符串,如果不加isnull的判断只要出现null那么整个字符串就变成null。
#5
謝謝,可以了,按
where ((isnull(T04,0)+isnull(X01,0)+isnull(X02,0)+isnull(X03,0)+isnull(X04,0))<>0)
這種方法,但還是奇怪,在上面select 時,T04,X01,X02,X03,X04我就有加isnull來判斷了,難道說上面select的isnull會無效?
where ((isnull(T04,0)+isnull(X01,0)+isnull(X02,0)+isnull(X03,0)+isnull(X04,0))<>0)
這種方法,但還是奇怪,在上面select 時,T04,X01,X02,X03,X04我就有加isnull來判斷了,難道說上面select的isnull會無效?
#6
“上面select的isnull會無效”,不會,那個isnull還是有效,只是你上面的是在select中做判斷,下面是在where中做判斷,相互間沒關係的。
#7
謝謝,了解了,看來還是sql基礎知識不踏實呀
#8
isnull((T04+X01-X02+X03),0) as 結存數
上面select的也分開寫isnull(T04)+....否則結果不對的
上面select的也分開寫isnull(T04)+....否則結果不對的
#1
看看將每個元素都加上isnull()
where ((isnull(T04,0)+isnull(X01,0)+isnull(X02,0)+isnull(X03,0)+isnull(X04,0))<>0)
另外,你select 里的結存數 最好也寫成這樣
where ((isnull(T04,0)+isnull(X01,0)+isnull(X02,0)+isnull(X03,0)+isnull(X04,0))<>0)
另外,你select 里的結存數 最好也寫成這樣
#2
where ((T04+X01+X02+X03+X04)<>0)
这样写会出问题的,只要有一个值为null,所有的值相加后都为null
因为where 语句不和null记录做比较,所以只要为null的记录都不出来
这样写会出问题的,只要有一个值为null,所有的值相加后都为null
因为where 语句不和null记录做比较,所以只要为null的记录都不出来
#3
但現在目前的情況是,上面查詢的幾條記錄中
第一條的"上月結存"是990 但也給排除掉了
第一條的"上月結存"是990 但也給排除掉了
#4
拼接字符串,如果不加isnull的判断只要出现null那么整个字符串就变成null。
#5
謝謝,可以了,按
where ((isnull(T04,0)+isnull(X01,0)+isnull(X02,0)+isnull(X03,0)+isnull(X04,0))<>0)
這種方法,但還是奇怪,在上面select 時,T04,X01,X02,X03,X04我就有加isnull來判斷了,難道說上面select的isnull會無效?
where ((isnull(T04,0)+isnull(X01,0)+isnull(X02,0)+isnull(X03,0)+isnull(X04,0))<>0)
這種方法,但還是奇怪,在上面select 時,T04,X01,X02,X03,X04我就有加isnull來判斷了,難道說上面select的isnull會無效?
#6
“上面select的isnull會無效”,不會,那個isnull還是有效,只是你上面的是在select中做判斷,下面是在where中做判斷,相互間沒關係的。
#7
謝謝,了解了,看來還是sql基礎知識不踏實呀
#8
isnull((T04+X01-X02+X03),0) as 結存數
上面select的也分開寫isnull(T04)+....否則結果不對的
上面select的也分開寫isnull(T04)+....否則結果不對的