因此,我需要有关查询的一些帮助来标记特定列中的重复项。
基本上我有两列,如下所示:
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/