2016-06-16 12 views
0

私は、以下の情報を示す3つのテーブルを結合したテーブルを持っています。SQL Serverのテーブル/列で繰り返し値にタグを付ける方法はありますか。

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

私は、顧客が同じ日にもう一度、その後の製品を注文した場合|| Dual Purchase ||として別の列を取得したいですか?

値は、ジョンは2つの別々のために6月16日にコークスを購入する場合、それはOrderIDによる二重のレコードを定義するには、両方のためのIDが

+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

用窓funcion ROW_NUMBER()に対するYESを持っている必要がありますのでYESまたはNO

する必要がありますおよび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 
関連する問題