2017-09-18 27 views
1

我有表中的數據如下圖所示:查詢返回Id列唯一但顯示號碼相同的數據?

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) 

回答

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; 
0

試試這個:

select * from Customer 
where customerid not in 
(select customerid 
from Customer 
group by customerid 
having count(distinct notodisplay) >1) 
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 
相關問題