2015-04-21 48 views
1

我正在搜索特定的SQL查詢。SQL - 如果有多個結果,則顯示唯一的結果或單詞

我有兩個表:「文件」和「DOCUMENT_CONTENT」與此類似:

DOCUMENT 

Number | Date  | 
---------+-------------+ 
48796 | 21/04/2015 | 
48797 | 21/04/2015 | 

DOCUMENT_CONTENT 

Number | Product_Code | Supplier | Quantity | 
---------+----------------+------------+------------+ 
48796 | 8008554  | SupplierA | 3  | 
48796 | 8008579  | SupplierA | 4  | 
48796 | 9870560  | SupplierA | 5  | 
48797 | 8008554  | SupplierA | 7  | 
48797 | 8081784  | SupplierB | 1  | 
48797 | 8217471  | SupplierA | 23  | 

在這個例子中,我有兩個文件48796和48797與幾個產品代碼,供應商和數量。

對於文件編號48796,供應商只是「供應商A」,但對於48797有供應商A和供應商B.

我想產生這樣的結果:

DOCUMENT 

Number | Date  | Supplier | 
---------+-------------+-------------+ 
48796 | 21/04/2015 | SupplierA | 
48797 | 21/04/2015 | several | 

這意味着,如果在文檔內容有不同的供應商,我顯示「幾」否則我顯示供應商的名稱。

我不知道如何在SQL查詢中做到這一點。如果有人有想法,我想知道它。

謝謝。

+1

CASE WHEN ..是你所需要的 – Tanner

回答

7

這裏的竅門是做聚集和的情況下,測試結果:

select d.*, dc.supplier 
from DOCUMENT d join 
    (select dc.number, 
      (case when min(dc.Supplier) = max(dc.Supplier) then min(dc.Supplier) 
        else 'Several' 
       end) as supplier 
     from DOCUMENT_CONTENT dc 
     group by dc.number 
    ) dc 
    on dc.number = d.number; 

這使用子查詢來計算新的供應商名稱,這樣你就可以很容易地把所有列從document。如果您可能在document_content中缺少文檔,那麼您會想要使用left join

0
Select Case when count(Supplier) = 1 then Max(supplier) else 'several' end 
from DOCUMENT D Inner Join DOCUMENT_CONTENT DC on D.Number = DC.Number 
Group by D.Date , D.Number