2015-11-06 39 views
0

我有一個SQL命令從數據庫中獲取項目編號,項目標題,員工姓名&號碼。SQL在不更改數據的情況下添加過濾參數

SELECT 
DOS.NUMFOLDER as ProjectNumber, 
DOS.DESCRIPTION as ProjectTitle, 
EMP.NUMEMPL as EmployeeNumber, 
EMP.EMPLNAME+ ' ' + EMP.EMPLSURNAME as EmployeeName 

FROM DOSEMPDT    DEM 
INNER JOIN DOSSIER   DOS ON DEM.SEQCONTRAT = DOS.SEQCONTRAT 
INNER JOIN EMPLOYE   EMP ON DEM.SEQEMPLOYE = EMP.SEQEMPLOYE 
--INNER JOIN BILLING  BIL ON DEM.SEQCONTRAT = FAC.SEQCONTRAT 

WHERE (DEM.DATEFINAFF IS NULL OR DEM.DATEFINAFF > GETDATE()) 
AND (DOS.DATEFIN IS NULL OR DOS.DATEFIN > GETDATE()) 
--AND FAC.DTBILLING IS NOT NULL 
--AND FAC.DTBILLING >= DATEADD(mm, -1, GETDATE()) 

ORDER BY NoProjet 

這給了我想要的東西;包含項目編號,項目名稱和員工的表格。預期的結果看起來有點像這樣:

projectA *titlea* 1111 Jim 
projectA *titlea* 2222 James 
projectB *titleb* 1111 Jim 
projectB *titleb* 3333 Paul 

但我想一個過濾器添加到結果。我仍然希望看到同一個項目的多個實例以及相關的員工,但我只想看到某些項目;那些日期不到一個月前的BILLING,沒有顯示BILLING

刪除INNER JOIN BILLING之前的註釋,使結果重複多次,可能是因爲許多項目有很多BILLING,但我不知道如何避免這種情況。我認爲這個問題存在於我的第三個INNER JOIN,我試過LEFT JOINRIGHT JOIN等......但無濟於事。

+0

這是一個很好的開始。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

你的語法是SQL Server,所以我刪除了MySQL標籤。 –

+0

我以爲我這樣做是不正確的,但實際上問題是我沒有想到數據會像他們一樣(同一日期,同一員工和同一個項目的兩張不同的發票),所以我認爲我正在創建重複條目。感謝@Mohamed Seifeddine Fnayou讓我走上正軌。我會投票結束這個問題,因爲它現在沒有多大意義。 – Felix

回答

1

我相信你只是顯示重複的數據。

事實上,發票表將具有合同序列號以及相關發票ID。例如

Project A Invoice_001 
Project A Invoice_002 

以您目前的選擇,你會得到總:

projectA *titlea* 1111 Jim 
projectA *titlea* 2222 James 
projectB *titleb* 1111 Jim 
projectB *titleb* 3333 Paul 

但是,如果添加在SELECT發票列,你可能會得到:

projectA *titlea* 1111 Jim Invoice_001 
projectA *titlea* 1111 Jim Invoice_002 
projectA *titlea* 2222 James Invoice_003 
projectB *titleb* 1111 Jim Invoice_004 
projectB *titleb* 3333 Paul Invoice_005 

因此,不再有重複的數據!

我希望這會有所幫助。

0

你可以做你希望與什麼樣exists

SELECT . . . 
FROM DOSEMPDT DEM INNER JOIN 
    DOSSIER DOS 
    ON DEM.SEQCONTRAT = DOS.SEQCONTRAT INNER JOIN 
    EMPLOYE EMP 
    ON DEM.SEQEMPLOYE = EMP.SEQEMPLOYE 
WHERE (DEM.DATEFINAFF IS NULL OR DEM.DATEFINAFF > GETDATE()) AND 
     (DOS.DATEFIN IS NULL OR DOS.DATEFIN > GETDATE()) AND 
     EXISTS (SELECT 1 
       FROM FACTURE FAC 
       WHERE DEM.SEQCONTRAT = FAC.SEQCONTRAT AND 
        FAC.DTFACTURE IS NOT NULL AND 
        FAC.DTFACTURE >= DATEADD(month, -1, GETDATE()) 
      ) 
+0

我嘗試過這種方式,並且每次只能讓每個項目獲得一次,之前我曾多次與不同的員工關聯過。這是打算?如果是這樣,這不完全是我想要的...我會嘗試編輯我的問題,並使其更清晰。 – Felix

相關問題