因此,我需要在查询中提供一些帮助,以便在特定列中标记重复项。
基本上我有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
答案 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