SqlServer查询

删库到跑路 2019-04-28 02:03:34
一个查询,有且只有两行,放到了临时表里,现在需要展示这两条数据不相同的列,如果列的数据相同就不需要展示此列,如下图,
只需要展示AOrderMan,AOrderTel,MSUSER_ID这三列的数据
...全文
194 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
删库到跑路 2019-04-30
  • 打赏
  • 举报
回复
引用 5 楼 Dear SQL 的回复:



终于等到你了啊,大佬
Dear SQL(燊) 2019-04-30
  • 打赏
  • 举报
回复

if object_id('tempdb..#list') is not null drop table #list
select a='a',b='123',c=12 into #list union all
select a='a',b='8',c=128

declare @col nvarchar(1000)='',@colname nvarchar(1000)='',@sql nvarchar(max)=''

select @col=@col+'count(distinct '+[name]+') as '+[name]+','
	,@colname=@colname+'['+[name]+'],'
from tempdb.sys.syscolumns a where id=object_id('tempdb..#list')


set @sql='
	set @col=''''
	select @col=@col+''[''+col+''],''
	from (select '+left(@col,len(@col)-1)+'
		 from #list
		 ) a unpivot (counts for col in('+left(@colname,len(@colname)-1)+'))pt
	where counts>=2
'

exec sp_executesql @sql,N'@col nvarchar(1000) out',@col=@col out

set @sql='
select '+left(@col,len(@col)-1)+' from #list
'
exec(@sql)

/*
b    c
---- -----------
123  12
8    128

(2 行受影响)
*/

ycj80 2019-04-30
  • 打赏
  • 举报
回复
你这个看似简单,实则比较复杂。 给你两个思路: 1。先进行行转列,筛选出列1与列2不相同的记录(原为字段),转列转行展示。 2.自己写一个过程或表函数,通过游标进行比较各个字段值,不相同的组合成select 清单展示。
删库到跑路 2019-04-30
  • 打赏
  • 举报
回复
这个不是列与行互转啊,这个就是同一个表里做对比,去掉相同的数据,留下不同的
删库到跑路 2019-04-30
  • 打赏
  • 举报
回复
完犊子,我都发了两个贴了,这个语句很难吗

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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