求单独列中不重复的数据

m0_37908418 2018-12-10 01:45:12
想求在一列中不重复的数据 并求出 用discount是无效的 参考下面图
...全文
449 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
罗后强 2018-12-24
  • 打赏
  • 举报
回复
SELECT * FROM tablename WHERE card# IN
(SELECT card# FROM
(SELECT card#,COUNT(card#) CT FROM pack.bull GROUP BY bull_type_id ) A
WHERE A.ct=1 )

使用聚合函数生成一张表(虚拟表)A,然后从虚拟表中选择只有一个记录的卡的卡号的集合,最后从原表中选择卡号位于集合中的记录。
邹小青 2018-12-23
  • 打赏
  • 举报
回复
《SQL 难点解决:直观分组》看看这篇文章能否帮到您?
qq_44216660 2018-12-22
  • 打赏
  • 举报
回复
看看,这个我也不会,,,,,,,,,
morliz子轩 2018-12-21
  • 打赏
  • 举报
回复
引用 18 楼 morliz子轩 的回复:

--假设表为#t
select * from #t where Card# in (
	select Card# from #t group by Card# having count(length)=1)
go
用ROW_NUMBER也一样可以去重,取不重复。
写错了。 纠正一下。

select * from #t where Card# in (
	select Card# from #t group by Card# having count(Card#)=1)
go
morliz子轩 2018-12-21
  • 打赏
  • 举报
回复

--假设表为#t
select * from #t where Card# in (
	select Card# from #t group by Card# having count(length)=1)
go
用ROW_NUMBER也一样可以去重,取不重复。
morliz子轩 2018-12-20
  • 打赏
  • 举报
回复
你的逻辑关系要写清楚,不然筛选出来的肯定不对
m0_37908418 2018-12-10
  • 打赏
  • 举报
回复
先谢谢大侠 ,不过可能我没有描述清楚我想要的结果。这个表中每个card通过ticket4为入ticket20为出,那么我之前发帖写的通过判断ticket得出临时表中记录 card# 那么一进一出就是一对,如果没有出的,那么查出来就是单独的只有Ticket=4,想将这个单独的查出来然后根据时间进行判断 例如下面记录的卡号 348 是单独的 其它通过条件查出都是一对出入的card,但在单独查出类似348这种就查不出
吉普赛的歌 2018-12-10
  • 打赏
  • 举报
回复
原来你是要本身就不重复的…… 看下这个:
;WITH cte as (
	SELECT ROW_NUMBER() OVER (PARTITION BY Card# ORDER BY (SELECT 1) ) AS rid
	,T.[Ticket#]
	,T.Workshop
	,T.[Card#]
	FROM Test.dbo.TicketDetailData125 T
)
SELECT * FROM cte AS a 
WHERE NOT EXISTS(
	SELECT 1 FROM cte AS b WHERE b.rid>1 AND a.card#=b.card# 	
)
ORDER BY Card#
m0_37908418 2018-12-10
  • 打赏
  • 举报
回复
@吉普赛的歌 根据你的sql查出的结果不正确哦 180和047都不是唯一的哦 是重复的,谢谢大家帮手 不过从一列中选出不重复的很麻烦哦
吉普赛的歌 2018-12-10
  • 打赏
  • 举报
回复
引用 11 楼 m0_37908418 的回复:
@ 吉普赛的歌 根据你写的 得出下面结果 还是没有得到不重复的记录
不要简化我的代码, 用下面的:
SELECT * FROM (
	SELECT ROW_NUMBER() OVER(PARTITION BY REPLACE(REPLACE(REPLACE([Card#], CHAR(10), ''), CHAR(13), ''),CHAR(9),'') 
		ORDER BY (SELECT 1)) AS rid
	,T.[Ticket#]
	,T.Workshop
	,T.[Card#]
	FROM Test.dbo.TicketDetailData125 T
) AS tt
WHERE tt.rid=1
ORDER BY tt.Workshop
m0_37908418 2018-12-10
  • 打赏
  • 举报
回复
@二月十六 有微信吗 告知我详细需求 谢谢
m0_37908418 2018-12-10
  • 打赏
  • 举报
回复
@ 吉普赛的歌 根据你写的 得出下面结果 还是没有得到不重复的记录
二月十六 2018-12-10
  • 打赏
  • 举报
回复
引用 9 楼 m0_37908418 的回复:
我一定要新建表吗 因为这个结果还要嵌套到其它查询sql中
不是,那个建表是我测试用的,直接用下边的select语句就行了,把#T测试表换成真正的实际表名。
m0_37908418 2018-12-10
  • 打赏
  • 举报
回复
我一定要新建表吗 因为这个结果还要嵌套到其它查询sql中
Dear SQL(燊) 2018-12-10
  • 打赏
  • 举报
回复

--测试数据
if not object_id(N'Tempdb..#T') is null
    drop table #T
Go
Create table #T([Ticket] int,[Card] int)
Insert #T
select 20,150 union all
select 20,150 union all
select 20,231
Go
--测试数据结束

;
with list as(
	select [Ticket],[Card],rid=ROW_NUMBER()over(partition by [Card] order by [Card])
	from #T
)
select lt.* 
from list lt
left join list li on lt.Card=li.Card and li.rid=2
where lt.rid=1 and li.rid is null

Ticket      Card        rid
----------- ----------- --------------------
20          231         1
二月十六 2018-12-10
  • 打赏
  • 举报
回复
引用 6 楼 m0_37908418 的回复:
但是150是重复的也被取出来了? 下面这种结果

150是因为有两条数据读出来不对是吗?那改成这样150的就不会出来了
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([Ticket] int,[Card] int)
Insert #T
select 20,150 union all
select 20,150 union all
select 20,231
Go
--测试数据结束
SELECT *
FROM
(
SELECT *,
COUNT(1) OVER (PARTITION BY Card ORDER BY GETDATE()) rn
FROM #T
) t
WHERE rn = 1;


m0_37908418 2018-12-10
  • 打赏
  • 举报
回复
但是150是重复的也被取出来了? 下面这种结果
吉普赛的歌 2018-12-10
  • 打赏
  • 举报
回复
有不可见字符?试下这个: 表名替换下
SELECT * FROM (
	SELECT ROW_NUMBER() OVER(PARTITION BY REPLACE(REPLACE(REPLACE([Card#], CHAR(10), ''), CHAR(13), ''),CHAR(9),'') 
							 ORDER BY (SELECT 1)) AS rid
	,*
	FROM tableName
) AS tt
WHERE tt.rid=1
二月十六 2018-12-10
  • 打赏
  • 举报
回复
猜测了一个结果,你看是不是想要这样的,简单的写了个例子
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([Ticket] int,[Card] int)
Insert #T
select 20,150 union all
select 20,150 union all
select 20,231
Go
--测试数据结束
SELECT *
FROM
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Card ORDER BY GETDATE()) rn
FROM #T
) t
WHERE rn = 1;


二月十六 2018-12-10
  • 打赏
  • 举报
回复
引用 2 楼 m0_37908418 的回复:
这是图
结果想要什么样的?是单独一列吗?select district card# from 表 为什么不行,想要什么样的。
加载更多回复(2)

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧