2013-10-24 71 views
1

我有以下功能查詢在Access中創建一個交叉/透視表選擇選自變換...透視表的子查詢表

TRANSFORM Sum(y.TNAV) AS TNAV 
SELECT y.RecDate 
FROM BNYDaily AS y 
WHERE (((y.AccName) In ("A","B")) AND y.RecDate >= DateValue("1/1/2013")) 
GROUP BY y.RecDate 
PIVOT y.AccName;) 

的問題是,該查詢返回的結果與NULL領域那弄亂了我的計算。我想忽略在此交叉表中有任一列NULL值的行:

RecDate  A     B 
.... 
1/25/2013 1,469,004,032.00 968.63 
1/26/2013 1,466,082,304.00  
1/28/2013      973.91 
1/29/2013 1,471,277,440.00 971.66 
... 

我嘗試使用上面的查詢是沒有任何的運氣子查詢以下查詢:

SELECT * FROM 
(
TRANSFORM Sum(y.TNAV) AS TNAV 
SELECT y.RecDate 
FROM BNYDaily AS y 
WHERE (((y.AccName) In ("A","B")) AND y.RecDate >= DateValue("1/1/2013")) 
GROUP BY y.RecDate 
PIVOT y.AccName; 
) AS t 
WHERE t.A IS NOT NULL AND t.B is NOT NULL 

很奇怪不在Access中運行並返回錯誤。如果我從交叉表查詢中查詢它作爲保存的查詢表。有任何想法嗎?

+0

有什麼特別的原因,你不只是對保存交叉表查詢運行查詢(因爲你已經知道,如果你這樣做它的工作原理)?交叉表查詢的行爲與其他類型的查詢有所不同,我還看到了其他幾種情況,其中在我們試圖將SQL作爲子查詢嵌入時,交叉表查詢不起作用。 –

+0

我在Excel中處理數據,並在Excel中設置了一個VB腳本,這樣我就可以根據列表中的用戶選擇來改變'A'' B'。如果我鎖定保存在Access中的交叉表查詢表,那麼我將失去此功能。 –

回答

1

而不是「擠出」包含從結果交叉表的空值的行,如何消除產生從源交叉表的空值的行?我剛剛試過以下,它似乎工作:

TRANSFORM Sum(y.TNAV) AS TNAV 
SELECT y.RecDate 
FROM 
    (
     SELECT RecDate, AccName, TNAV 
     FROM BNYDaily 
     WHERE RecDate IN (SELECT RecDate FROM BNYDaily WHERE AccName = "A") 
      AND RecDate IN (SELECT RecDate FROM BNYDaily WHERE AccName = "B") 
    ) AS y 
WHERE (((y.AccName) In ("A","B")) AND y.RecDate >= DateValue("1/1/2013")) 
GROUP BY y.RecDate 
PIVOT y.AccName; 
+0

感謝這實際上的作品!我在嘗試從'BNYDaily'表格的值中排除空位時嘗試了類似的東西......但應該在日期內嘗試過! –