2012-02-27 66 views
0

我收到一個錯誤,除非我刪除count(distinct ...)之一。有人能告訴我爲什麼以及如何解決它? 我在vfp。 iif([condition],[if true],[else])相當於case when多重計數(不同)

SELECT * FROM dpgift where !nocalc AND rectype = "G" AND sol = "EM112" INTO CURSOR cGift 
    SELECT 
     list_code, 
     count(distinct iif(language != 'F' AND renew = '0' AND type = 'IN',donor,0)) as d_Count_E_New_Indiv, 
     count(distinct iif(language = 'F' AND renew = '0' AND type = 'IN',donor,0)) as d_Count_F_New_Indiv /*it works if i remove this*/ 
    FROM cGift gift 
     LEFT JOIN 
       (select didnumb, language, type from dp) d 
      on cast(gift.donor as i) = cast(d.didnumb as i) 
    GROUP BY list_code 
    ORDER by list_code 

編輯: 顯然,你不能在同一水平上使用多個不同的命令。任何方式在這個?

+0

錯誤? *什麼*錯誤? – 2012-02-27 20:22:28

+0

SQL:Distinct is invalid – slicedtoad 2012-02-27 20:23:31

+1

我會考慮的第一件事就是光標......你爲什麼使用它,總是比光標更好。 對於計數不同,我的首選是建立一個選擇語句,獲取你想加入它的ID +你正在尋找的計數(使用group by來區分),然後將它作爲一個子查詢返回到你的表。如果你可以給模式和什麼算作一個「獨特」的行,我可以爲你建立一個答案。 – Twelfth 2012-02-27 21:03:09

回答

1

VFP不支持兩個「不同」條款在同一個查詢... ...期我甚至對我自己的一個簡單的表測試,從內部VFP直如

select count(distinct Col1) as Cnt1, count(distinct col2) as Cnt2 from MyTable 

導致崩潰。我不知道你爲什麼試圖做DISTINCT,因爲你只是在測試一個條件......我更準確地表明你只想每個標準類別的COUNT條目而不是實際DISTINCT

因爲你不是「alias.field」引用你的查詢中的列,我不知道哪一列是什麼的基礎。但是,爲了幫助處理您的DISTINCT,並且您使用的是「INTO CURSOR」子句(不會與任何OleDB .net開發相關聯),您將從WITHIN VFP應用程序運行,因此我會預先查詢並將其組這些標準,像...

select list_code, 
     donor, 
     max(iif(language != 'F' and renew = '0' and type = 'IN', 1, 0)) as EQualified, 
     max(iif(language = 'F' and renew = '0' and type = 'IN', 1, 0)) as FQualified 
    from 
     list_code 
    group by 
     list_code, 
     donor 
    into 
     cursor cGroupedByDonor 

因此上述將只能得到1計數每個供體每列表代碼,無論有多少記錄中出線。此外,如果一個記錄爲「F」,另一個沒有,那麼你必須在每一列的值1 ......然後,你可以這樣做......

select 
     list_code, 
     sum(EQualified) as DistEQualified, 
     sum(FQualified) as DistFQualified 
    from 
     cGroupedByDonor 
    group by 
     list_code 
    into 
     cursor cDistinctByListCode 

然後從那跑...

1

您可以嘗試使用其他派生表或兩個派生表來執行所需的計算,或使用投影(字段列表中的查詢)。沒有看到架構,很難知道哪一個適合你。

+0

是的 - 你可能不得不重新考慮你在這裏需要什麼。在這樣的查詢中你不能有兩個區別,你必須去掉另一個子查詢或重新思考。 – PlexQ 2012-02-28 00:51:21

+0

是的,我正在重塑一切。仍然不明白爲什麼兩個區別不起作用,我敢肯定他們在其他平臺上工作。 – slicedtoad 2012-02-28 15:19:40