2016-02-29 61 views
2

我碰到的嘗試寫一些SQL的MS Access將分析一些數據在我希望的方式向下一個問題。雖然我承認新的(或仍然在學習超出了大專班我花了五年前的邊界)與問候到SQL,我想,認爲我想要做的可以完成。訪問SQL條件分句多個條件/記錄欄一樣

場景: 雖然我可能沒有開始這個所有有效下手的,我開始和兩個表。原始數據集從72K記錄開始。

這個目標,或者我在這個案子中想要達到的目標是找到某個人出現多於一個指控的所有記錄,然而定義爲擁有0分的指控的結果是有罪的,但是其他費用被發現NG或解僱。

這是我到目前爲止。我開始使用的數據來自兩個表格,一個包含外觀,一個包含代碼和點。

的外觀的一個例子是類似以下內容:

APP DATE  CHARGE OUTCOME 
=================================== 
1  1/1/2014 137  GT   
2  1/5/2014 122  GT   
2  1/5/2014 123  DI  
3  1/6/2014 257  DI 
3  1/6/2014 257  DI 
4  1/6/2014 137  NG 
4  1/6/2014 123  DI 
4  1/6/2014 122  GT 

我該鏈接的費用,與充電相關的積分潛在數量第二個表,非常簡單的格式有

CHARGE POINT 
=============== 
122  0 
123  2 
137  2 
257  0 

所以我設計了幾個基本的查詢,因爲我主要是基於這是給我提供了大量的數據文件中的填空。第一個拉着加入了前兩個表一起,所以我留下了看上去沿東西線的表:

APP DATE  CHARGE OUTCOME POINTS 
========================================== 
1  1/1/2014 137  GT  2  
2  1/5/2014 122  GT  0 
2  1/5/2014 123  DI  2 
3  1/6/2014 257  DI  0 
3  1/6/2014 257  DI  0 
4  1/6/2014 137  NG  2 
4  1/6/2014 123  DI  2 
4  1/6/2014 122  GT  0 

然後我創建了各自三個小的查詢要求出示數據從一個子集主查詢,一個用於觀察= GT,點= 0,另一個用於結果= NG,積分> 2,最後結果= DI,積分> 2。查詢中的每一個被稱爲帶來由原來的72K設置到39K記錄生成表查詢。應用另一個查詢

Select * from record_set Where RecordID IN 
(Select RecordID from record_Set 
GROUP BY RecordID 
HAVING COUNT (*) > 1)) 

最終帶來了總計下降到不到21K。

我的問題是這樣的: 我想回需要進一步過濾結果的數據集。目前我還沒有想出如何剔除其中兩個值都爲0。據我所知,我應該走近這個一個完全不同的方式APP值。

編輯: 我要尋找的是返回到看起來像這樣的數據集:

APP DATE  CHARGE OUTCOME POINTS 
==========================================  
2  1/5/2014 122  GT  0 
2  1/5/2014 123  DI  2 
4  1/6/2014 137  NG  2 
4  1/6/2014 123  DI  2 
4  1/6/2014 122  GT  0 

當單個記錄被拔​​掉,並且其中結果是DI/0,所有的APP涉及的費用。

我一直在使用一個簡單的WHERE子句僅分析記錄單值試圖目前嘗試。我想我正在尋找一種方法來評估兩者。也許,如果我寫的價值單獨的臨時表,然後做了工會只對出現的兩個表中的APP值會更容易?

任何幫助或指導將不勝感激!

回答

0

我的MS-Access體驗相當接近於零,但我相信這種語法將起作用。至少它可能引發一些想法。

SELECT APP, DATE, CHARGE, OUTCOME, POINTS 
FROM APP A 
INNER JOIN CHARGE C on C.Charge = A.Charge 
WHERE (Outcome = 'GT' and Points = '0') 
OR (Outcome = 'NG' and Points > '2') 
OR (Outcome = 'DI' and Points > '2') 

我不知道你所說的情況是什麼意思時皆爲0,而且很有可能,你可以添加其他WHERE子句來過濾那些出以及更多。

編輯:

我猜的數據集我尋求永遠有以下幾點:更多 不是一個APP,同時含有0 PTS這是一個GT, 和一個(或多個一條記錄記錄),其可以是大於0的 的點值,即DI或NG。我開始在2的原因是,我知道 有沒有那麼包含1的任何值,但我想得周全 它們可以列入符合0 PT和GT的要求

首先下載應用:上述

SELECT APP 
FROM APP A 
INNER JOIN CHARGE C on C.Charge = A.Charge 
WHERE Outcome = 'GT' 
AND Points = '0' 

重用以獲得具有比0和更大的點值的APP DI或NG:

SELECT APP 
FROM APP A 
INNER JOIN CHARGE C on C.Charge = A.Charge 
WHERE (Outcome = 'DI' AND Points > '0') 
OR (Outcome = 'NG' AND Points > '0') 

接着,結合上述邏輯成一個查詢,使用兩個subquer IES,爲了只拉滿足這兩個要求的應用數據:

SELECT APP, DATE, A.CHARGE, OUTCOME, POINTS 
FROM APP A 
INNER JOIN CHARGE C on C.Charge = A.Charge 
WHERE APP IN (
    SELECT APP 
    FROM APP A 
    INNER JOIN CHARGE C on C.Charge = A.Charge 
    WHERE Outcome = 'GT' 
    AND Points = '0' 
) 
AND APP IN (
    SELECT APP 
    FROM APP A 
    INNER JOIN CHARGE C on C.Charge = A.Charge 
    WHERE (Outcome = 'NG' AND Points > '0') 
    OR (Outcome = 'DI' AND Points > '0') 
) 

這將導致只有擁有GT,0 PT電荷,而另一個電荷是DI或NG用1組或更大的PT應用程序。

+0

對不起,我清理了我的問題,以便更清楚一點。我想要做的是清除所有記錄中包含僅爲0的點值的實例。因此,如果某人有5條記錄,我需要能夠將它們與自己進行比較。 – dramerus

+0

到目前爲止我唯一的想法就是解決這個問題,如下所示:分開收費/應用程序組合,這些收費/應用程序組合不包含點數。生成一個適用APP的列表,然後在兩個表格之間進行比較。如果兩者都不出現,那麼它將不被包括在內....也許?想法? – dramerus

+0

我仍然有點困惑 - 用你的邏輯測試我的建議會給你提供你請求的結果集。 http://sqlfiddle.com/#!9/97c0c/3 –