sql - 在新列中标记重复值

标签 sql excel count duplicates

因此,我需要有关查询的一些帮助来标记特定列中的重复项。

基本上我有两列,如下所示:

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

我想在 Q 中创建一个新列,将“1”标记为唯一,将“0”标记为仅 cust_id 列的重复项。我的想法是在 order_id 列上使用 min 或 < 函数来确定首先输入哪个 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 的值以及为什么所有值都 > 1 并返回所有“1”。

如何重写此代码以将 cust_id 的第一个实例标记为“1”,其余实例(或将重复的 cust_id 标记为“0”

目的是让我可以在 Excel 中汇总“1”,并从那里对数据透视图进行计算。

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

编辑:

使用 MS SQL 2008 R2

最佳答案

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 进行分组。

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 

关于sql - 在新列中标记重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23351598/

相关文章:

r - 如何统计特定组中共同值的数量?

python - 如何从 Seaborn 的计数图图形中删除标签名称?

python - 如何计算每个季节有多少天的答案等于 pandas 数据框中的不同数字?

php - 找到第一个达到目标的用户

Mysql准备做2014年每月分区

SQL - 如果行数大于则插入

excel - 将 Excel HTML 转换为更清晰的 HTML

mysql - SP_RENAME 不起作用

string - 为什么中间有空格? VBA excel

Excel将我的数字变成 float