我的数据如下表所示:
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)
答案 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