查询返回Id列唯一但显示数字相同的数据?

时间:2017-09-18 10:23:10

标签: sql sql-server

我的数据如下表所示:

CustomerId   OrderId  NoToDisplay
123           176        1
123           177        1
124           125        1
124           126        2
124           127        3
125           182        6
125           183        6

我正在尝试编写一个返回具有相同NoToDisplay值的唯一订单号的查询。因此,从上面的数据集片段输出将是:

CustomerId   OrderId  NoToDisplay
123           176        1
123           177        1
125           182        6
125           183        6

这是我尝试的查询,但它没有返回我的预期:

SELECT DISTINCT c.CustomerID, o.OrderID, o.NoToDisplay
FROM Customer c
LEFT OUTER JOIN Order o ON o.CustomerID = c.CustomerID 
WHERE o.OrderID IN (SELECT DISTINCT o.NoToDisplay
FROM Customer c
LEFT OUTER JOIN Order o ON o.CustomerID = c.CustomerID 
GROUP BY o.NoToDisplay HAVING COUNT(*) > 1)

3 个答案:

答案 0 :(得分:1)

您似乎希望NoToDisplay值完全相同的客户。为了吸引客户:

select customerid
from t
group by customerid
having min(NoToDisplay) = max(NoToDisplay);

您可以轻松扩展此内容以获取原始行:

select t.*
from t join
     (select customerid
      from t
      group by customerid
      having min(NoToDisplay) = max(NoToDisplay)
     ) tc
     on t.customerid = tc.customerid;

答案 1 :(得分:0)

试试这个:

select * from Customer 
where customerid not in
(select customerid 
 from Customer 
 group by customerid 
 having count(distinct notodisplay) >1)

答案 2 :(得分:0)

您可以尝试以下内容:

declare @Customer  table
(CustomerId int,   OrderId int,  NoToDisplay int)
insert into @Customer
select 123 ,          176  ,      1 union all
select 123 ,          177  ,      1 union all
select 124 ,          125  ,      1 union all
select 124 ,          126  ,      2 union all
select 124 ,          127  ,      3 union all
select 125 ,          182  ,      6 union all
select 125 ,          183  ,      6

select CustomerID, OrderId, NoToDisplay 
from
(select CustomerID, OrderId, NoToDisplay, count(*) OVER (PARTITION BY CustomerID, NoToDisplay) [check]
from @Customer 
group by CustomerID, OrderID, NoToDisplay) x
where [check] > 1
order by CustomerID