2016-12-05 40 views
2

我想創建一個表,它採用2列的不同組合,只返回那些大於1的表。如何創建一個跨多個列使用不同值的聚合作爲參數的表?

我到目前爲止創建了一個所有公司和與之相關的合同表。

Company Contract 
------- -------- 
ABC  0000111 
ABC  0000113 
DEF  0000124 
GHI  0000207 
GHI  0000389 
GHI  0000567 

它還創建了第二個表,找出那些columan的不同組合,並創建它們出現次數的列表。

Company Countr 
------- -------- 
GHI  3 
ABC  2 

我試圖做出第三個表,只返回公司與多個合同匹配的那些行。

Company Contract 
------- -------- 
ABC  0000111 
ABC  0000113 
GHI  0000207 
GHI  0000389 
GHI  0000567 

修改的源,如果它可以幫助

SELECT DISTINCT inventory.company, inventory.contracts 
FROM inventory 
WHERE inventory.company not in ('Company Name') 
( 
    SELECT 
     DISTINCT inventory.company, 
     count(DISTINCT(concat(inventory.company, inventory.contracts))) AS Countr 
    FROM inventory 
    WHERE 
    inventory.company not in ('Company Name') 
    GROUP BY company 
    HAVING count(DISTINCT(concat(inventory.company, inventory.contracts))) > 1 
) 
ORDER BY Countr DESC 
+2

嗨Vyff。一起標記MySQL和SQL Server被認爲是糟糕的形式。兩種產品的工作方式不同。這意味着在我們可以幫助您之前,我們需要知道您使用的是哪一個。 –

+0

我的歉意。這是我第一次發佈,所以我只是使用了推薦的stackoverflow。我正在使用SQL服務器。 – Vyff

+0

Vyff你在這裏有幾個不同的答案,澄清你是否可以確認你想看看有多個合同的公司,即使它們是相同的?例如,如果'inventory'中有兩條記錄是XYZ,0000001,那麼您是否要返回XYZ,0000001? – EoinS

回答

2

像這樣的東西應該工作:

SELECT * FROM inventory WHERE company in 
(SELECT company FROM inventory GROUP BY company HAVING count(distinct contract)>1); 

子查詢剛剛創建的company S作多個contract列表與他們相關聯。然後選擇與那些company s匹配的所有數據inventory。該DISTINCT修改在CountHAVING子句中可確保有多個不同合約

Here's a link to the functional schema and query

+0

謝謝工作完美 – Vyff

1

我不知道是否有必要創建一個以上的表。考慮到你的信息給瞭如下我會做到這一點:

與公司和合同信息創建一個表,並把它TABLE

Company Contract 
------- -------- 
ABC  0000111 
ABC  0000113 
DEF  0000124 
GHI  0000207 
GHI  0000389 
GHI  0000567 

然後我會在該表上創建一個視圖如下,並調用它VIEW1 ;列被稱爲COMPANYCONTRACT_COUNT,例如:

select company, count(contract) from TABLE group by company; 

然後,我將創造另一種觀點認爲,視圖2,用不同的查詢:

select distinct TABLE.company, TABLE.contract from TABLE, VIEW1 where TABLE.COMPANY=VIEW1.COMPANY and CONTRACT_COUNT > 1 
相關問題