2017-07-27 85 views
-1

我有以下表SQL - 分组结果中找到独特的价值

**Order** 
- Id (int) 
- OrderDate (datetime) 
- OrderNumber (nvarchar) 
- CustomerId (int) 
- TotalAmount (decimal) 

 

**OrderItem** 
- Id (int) 
- OrderId (int) 
- ProductId (int) 
- UnitPrice (decimal) 
- Quantity (int) 

 

**Product** 
- Id (int) 
- ProductName (nvarchar) 
- SupplierId (int) 
- UnitPrice (decimal) 
- Package (nvarchar) 
- IsDiscontinued (bit) 

 

**Supplier** 
- Id (int) 
- CompanyName (nvarchar) 
- ContactName (nvarchar) 
- ContactTitle (nvarchar) 
- City (nvarchar) 
- Country (nvarchar) 
- Phone (nvarchar) 
- Fax (nvarchar) 

我需要找出所有包含来自单个国家的产品的订单。任何帮助赞赏。

+0

可以请你做一个sqlfiddle –

+1

请** [编辑] **你的问题,并添加基于该数据的一些样本数据和预期输出。 [**格式化文本**](http://stackoverflow.com/help/formatting)请,[**没有屏幕截图**](http://meta.stackoverflow.com/questions/285551/why-may -i-不上传图像-的代码上那么当灰化-A-问题/ 285557#285557)。 ** [**]您的问题 - 请勿**在论坛中发布代码或其他信息。 –

+1

您正在使用哪个[DBMS](https://en.wikipedia.org/wiki/DBMS)? Postgres的?甲骨文? –

回答

0

请试试这个,它可以帮助

select * from (
     select * from (
      select ROW_NUMBER() over(partition by s.Country order by s.Country) RowNo,o.* from [order] as o 
      inner join OrderItem as oi on o.Id = oi.OrderId 
      inner join Product as p on ProductId = p.Id 
      inner join Supplier as s on p.SupplierId = s.Id 
     ) as t 
     where RowNo > 1 
    ) as t 
    right join [order] as o on t.Id = o.Id 
    where t.Id is null