2016-11-24 73 views
0

我有一個非常大的選擇,我必須加入兩個結果,但我無法找到一種方法來使其工作。代碼是這樣的:foxpro選擇並加入結果

(select isnull(sum(fn.tqq),0) from fn where fn.icecream in (1,2,3,4,5,6,7,8,9) and (fn.fdata BETWEEN #2# AND #3#) and fn.usr1 not like '%'+'CHOC'+'%') as Total1, 

(select isnull(sum(fn.tqq),0) from fn where fn.icecream in (1,2,3,4,5,6,7,8,9) and (fn.fdata BETWEEN #4# AND #5#) and pn.usr1 not like '%'+'Portes'+'%') as Total2, 

的是,我要參加,最終,從icream 3和7,冰淇淋8個9任何思想的結果嗎?

回答

0

雖然標記爲VFP,但該示例SQL聽起來不是VFP查詢,也不是MS SQL服務器查詢。如果第二,我們認爲這是一個有效的SQL,那麼你可以得到你最初提議在這樣的代碼:

Select t1.Total1, t2.Total2 From ; 
    (Select Nvl(Sum(fn.tqq),0) As Total1 ; 
    from fn ; 
    where fn.icecream In (1,2,3,4,5,6,7,8,9) And ; 
    (fn.fdata Between #2# And #3#) And ; 
    fn.usr1 Not Like '%'+'CHOC'+'%') t1, ; 
    (Select Nvl(Sum(fn.tqq),0) As Total2 ; 
    from fn ; 
    where fn.icecream In (1,2,3,4,5,6,7,8,9) And ; 
    (fn.fdata Between #4# And #5#) And ; 
    fn.usr1 Not Like '%'+'Portes'+'%') t2 

或(更VFP具體的查詢):

Select ; 
    Sum(Iif(InList(icecream,1,2,3,4,5,6,7,8,9) And ; 
     Between(fdata, #2# , #3#) And ; 
     !('CHOC'$usr1), tqq, 0)) as Total1, ; 
    Sum(Iif(InList(icecream,1,2,3,4,5,6,7,8,9) And ; 
     Between(fdata, #4# , #5#) And ; 
     !('Portes'$usr1), tqq, 0)) as Total2 ; 
    from fn 

然而,閱讀你的最後一句話,它更令你困惑的是你真正想要的。如果以上內容不符合您的要求,請提供一些示例數據和您希望達到的結果,以便我們提供更好的數據。

+0

有什麼關於此的?真的可以用一隻手:) – questionador

+0

我注意到當你添加這個回覆時你有一個新的添加。很抱歉,你顯示的代碼在我曾經使用的數據庫(VFP,PostgreSQL,MS SQL服務器,SQLite和其他一些數據庫)中是無效的SQL。那是什麼數據庫?這使得你很難理解你想要做什麼。也許相反,你應該提供一些樣本數據和預期的輸出(當然還有你正在使用的數據庫)。 –

+0

我相信它的視覺狐狸親,之間的某處和SQL ...但SQL將工作。我有點努力了,但以穴居人的方式,如果你有任何的... – questionador

0

OK,i'm那種失去了現在,所以這裏是全碼:

select 
X.VENDEDOR AS VENDEDOR, 
X.VENDNM AS VENDNM, 
X.NO AS NO, 
X.nome AS nome, 
isnull(sum(x.qtt_1),0) as Qtt_1, 
isnull(sum(x.qtt_2),0) as Qtt_2, 
#2# as Data1, 
#3# as Data2, 
#4# as Data3, 
#5# as Data4, 
(SELECT DESIGN FROM ST WHERE ST.forref ='*br1000*') AS ARTIGO, 

(select isnull(sum(pn.qtt),0) from pn where pn.vendedor in (1,2,3,4,5,6,7,8,9) and (pn.fdata BETWEEN #2# AND #3#) and pn.usr1 not like '%'+'Portes'+'%') as Total1, 

(select isnull(sum(pn.qtt),0) from pn where pn.vendedor in (1,2,3,4,5,6,7,8,9) and (pn.fdata BETWEEN #4# AND #5#) and pn.usr1 not like '%'+'Portes'+'%') as Total2, 

((select isnull(sum(pn.qtt),0) from pn where pn.vendnm like x.vendnm and (pn.fdata BETWEEN #4# AND #5#) and pn.usr1 not like '%'+'Portes'+'%')-(select isnull(sum(pn.qtt),0) from pn where pn.vendnm like x.vendnm and (pn.fdata BETWEEN #2# AND #3#) and pn.usr1 not like '%'+'Portes'+'%')) as Dif_Total_Vend, 

isnull(
round((((select sum(pn.qtt) from pn where pn.vendedor in (1,2,3,4,5,6,7,8,9) and (pn.fdata BETWEEN #4# AND #5#) and pn.usr1 not like '%'+'Portes'+'%') 
- 
(select sum(pn.qtt) from pn where pn.vendedor in (1,2,3,4,5,6,7,8,9) and (pn.fdata BETWEEN #2# AND #3#) and pn.usr1 not like '%'+'Portes'+'%'))/ 
(select sum(pn.qtt) from pn where pn.vendedor in (1,2,3,4,5,6,7,8,9) and (pn.fdata BETWEEN #2# AND #3#) and pn.usr1 not like '%'+'Portes'+'%'))*100,2),0) as Perc_Dif, 

isnull(
round((((select sum(pn.qtt) from pn where pn.vendnm like x.vendnm and (pn.fdata BETWEEN #4# AND #5#) and pn.usr1 not like '%'+'Portes'+'%') 
- 
(select sum(pn.qtt) from pn where pn.vendnm like x.vendnm and (pn.fdata BETWEEN #2# AND #3#) and pn.usr1 not like '%'+'Portes'+'%'))/ 
(select sum(pn.qtt) from pn where pn.vendnm like x.vendnm and (pn.fdata BETWEEN #2# AND #3#) and pn.usr1 not like '%'+'Portes'+'%'))*100,2),0) as Perc_Dif_Vend 

from 
(
select 
pn.vendedor as Vendedor, 
pn.vendnm as Vendnm, 
pn.no as No, 
(select nome from cl where cl.no=pn.no) as nome, 
pn.qtt as Qtt_1, 
0 as Qtt_2 
from pn 
where (pn.fdata BETWEEN #2# AND #3#) 

union all 

select 
pn.vendedor as Vendedor, 
pn.vendnm as Vendnm, 
pn.no as No, 
(select nome from cl where cl.no=pn.no) as nome, 
0 as Qtt_1, 
pn.qtt as Qtt_2 
from pn 
where (pn.fdata BETWEEN #4# AND #5#) AND (pn.Vendedor '3' == pn.Vendedor '7') 
) 
x 

group by x.no,x.nome, x.vendedor,x.vendnm 
order by x.nome,x.vendedor 

我希望發生的是,供應商「3」來代替數字「7」,和數字'8'來代替'9'。當我想要的是從數字'3'和'7'作爲一個結果(與數字'8'和'9'相同的東西)時,我會得到重複的結果。