2016-06-16 2 views
0

У меня есть таблица, которая объединяет 3 таблицы, которые показывают ниже информацию.Как отмечать повторяющиеся значения в таблице/столбце SQL Server?

|| OrderID || Order Date || Customer || Customer City || Product || Amount || 

Я хочу, чтобы получить еще один столбец, как || Dual Purchase || если клиент заказал продукт еще раз, то в тот же день?

Значение должно быть YES или NO

Так что если Джон покупает кокса на 16 июня в 2 заказывается отдельно, то он должен иметь YES против обоих идентификаторов заказов

+0

Просьба предоставить данные образцы и ожидаемый результат. –

ответ

0

Я думаю, что это поможет ..

Select 
      O.OrderID,O.[Order Date],c.Customer,c.[Customer City],P.Product,O.Amount,a.[More then Once] 
from  Orders O 
inner join Customers C 
on   O.Customer_Id=C.Customer_Id 
inner join Product P 
On   O.Product_Id=P.Product_Id 
Cross Apply ( select Case when count(1)>1 then 'Yes' Else 'No' [More then Once] end from Orders 
       where Customer_Id=O.Customer_Id and cast([Order Date] as date)=cast(O.[Order Date] as date) 
       group by Customer_Id,cast([Order Date] as date) 
      ) a 
0

Используйте окно несильно ROW_NUMBER() определить двойные записи по OrderID и Customer. Проверьте, если строка больше 1:

DECLARE @Table TABLE (OrderID int, Customer int, OrderDate date) 

INSERT INTO @Table 
VALUES 
(1,2, Getdate()), 
(1,2, DATEADD(day,1,Getdate())), 
(1,2, DATEADD(day,1,Getdate())), 
(2,3, Getdate()), 
(2,3, DATEADD(day,1,Getdate())) 

SELECT 
    *, 
    IIF(ROW_NUMBER() OVER (PARTITION BY t.OrderID, t.Customer ORDER BY t.OrderID) > 1, 'YES', 'NO') AS DualPurchase 
FROM @Table AS t 
2

Вы можете сделать это следующим образом:

SELECT OrderID 
    , OrderDate 
    , Customer 
    , CustomerCity 
    , Product 
    , Amount 
    , Case when Count(Product) Over(Partition by OrderDate, Customer, Product) > 1 
     then 'Yes' else 'No' end as DualPurchase 
FROM TableName 
Смежные вопросы