2010-09-19 77 views
2

我需要建立SQL查詢的幫助。如何在SQL中選擇交叉表?

我有4個表格:賣家,商品,項目和銷售。

賣家表具有以下結構:

SellerID (int) PK 
SellerName (nvarchar) 
SellerStatus (int) 
SellerCity (nvarchar) 

商品:

GoodsID (int) PK 
GoodsTitle (nvarchar) 
GoodsColor (nvarchar) 
GoodsSize (int) 
GoodsCity (nvarchar) 

項目:

ProjectID (int) PK 
ProjectTitle (nvarchar) 
ProjectCity (nvarchar) 

銷售:

SellerID (int) 
GoodsID (int) 
ProjectID (int) 
Price (int) 

我需要獲得賣家ID,它將相同的商品分配給所有項目。

任何人都可以幫我查詢嗎? 我使用MSSQL。

在此先感謝

+1

你可以張貼一些你已經擁有的代碼? – 2010-09-19 13:15:38

+1

請在下次顯示代碼或數據庫對象時使用「代碼」標籤;它很好地格式化它們,使它們更容易閱讀。 – LittleBobbyTables 2010-09-19 13:20:51

+0

我不知道如何實現它,所以我沒有任何東西可以顯示。 – 2010-09-19 13:23:42

回答

6

老實說,我是不是知道我是否已經明白正是所有要求(我沒有經歷所有的評論,但有點糊塗之後)。但是,如果您希望所有已售出至少1件GOOD的所有賣家都參與到所有項目中,則我認爲下面的內容可能會給您。

你可以試試看,看看它是否?我真的無法使用數據庫來嘗試它現在

此外,萬一它不符合我錯過了一些要求,請隨時闡述一點,也許使用示例數據 - 這可能會使它更簡單對全部。

SELECT SellerID FROM SALES 
GROUP BY SellerID, GoodsID 
HAVING COUNT(ProjectID) = SELECT count(ProjectID) FROM Projects 
+0

+1這就是我從評論中瞭解它的方式。 – 2010-09-19 14:19:00

+0

偉大的工作,謝謝 – 2010-09-19 14:46:29

+0

+1提及*(SellerID,GoodsID,ProjectID)*必須*唯一*,即賣方不能以同樣的價格或不同的價格一)。 – 2010-09-19 16:07:00

0

試試這個,讓我知道如果這是正確的方向:

select SellerID 
from Sales s1 join Goods g1 on (GoodsID) 
where not exists 
    (select SellerID, GoodID 
    from Sales s2 
     join Goods g2 on (GoodsID) 
     left join Sales on (SellerID, GoodsID) 
    where s1.Seller = s2.Seller and 
      g1.GoodsID = g2.GoodsID and 
      Sales.ProjectID is null) 
+0

它有什麼不對,SQL管理工作室在第3行和第7行的Where表達式附近拋出錯誤(表達式的類型必須是邏輯) – 2010-09-19 14:47:40