2010-09-19 44 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