在新列中标记重复值

时间:2014-04-28 21:36:54

标签: sql excel count duplicates

因此,我需要在查询中提供一些帮助,以便在特定列中标记重复项。

基本上我有2个这样的列:

cust_id    Order_id
  001        001
  001        002
  001        003
  002        001
  003        001
  003        002

我想在我的Q中创建一个标记为' 1'对于独特的' 0'仅用于cust_id列的副本。我的想法是使用min或< order_id列上的函数,以确定首先输入哪个cust_id以标记为' 1'

到目前为止,这是我提出的,这显然是不对的:

SELECT
A.cust_id,
B.order_id,
CASE
WHEN COUNT(A.cust_id) > 1 THEN 0
WHEN COUNT(A.cust_id) = 1 THEN 1
END AS 'TESTING'

FROM CUST A INNER JOIN ORDER B
ON B.cust_id = A.cust_id

GROUP BY B.order_id, A.cust_id

这只会运行,但只标记' 1'。我知道这是因为它完全按照我的要求去做,而且它实际上是在查看cust_id的值以及为什么ALL都是> 1并返回所有' 1'

如何重新编写此标记以使用' 1'标记第一个cust_id实例?其余的(或重复的cust_id' 0'

目的是这样我可以总结excel中的' 1并从那里进行计算以获得数据透视图。

提前感谢您的帮助!!!!!这个网站不止一次救了我的命!

编辑:

使用MS SQL 2008 R2

2 个答案:

答案 0 :(得分:2)

cust_id    Order_id     Unique
  001        001          1
  001        002          0 
  001        003          0
  002        001          1
  003        001          1
  003        002          0

以上结果是否符合您的要求?下面是一个基于AdventureWorks数据库的示例。你获得全部1的原因是由于对cust和order的分组。您想要只分组Cust。

use AdventureWorks2008R2

;with CustSales as

(

select 

    C.CustomerID,

    H.SalesOrderID, 

    ROW_NUMBER() over (partition by C.CustomerID order by SalesOrderID)  as s 

from Sales.Customer C 

join Sales.SalesOrderheader H on 

C.CustomerID = H.CustomerID 

)

select 

    CustomerID,

    SalesOrderID,

    case when s = 1 then 1 else 0 end as [Unique]

from CustSales 

答案 1 :(得分:0)

SELECT t1.*, CASE s.num WHEN 1 THEN 1 ELSE 0 END uniq
  FROM Table1 t1
    JOIN (SELECT cust_id, COUNT(*) num FROM Table1 GROUP BY cust_id) s
      ON s.cust_id = t1.cust_id

SQLFiddle