Sql 如何透视数据以比较具有任意ID的2条记录?
假设我有一个非常简单的表,如下所示:Sql 如何透视数据以比较具有任意ID的2条记录?,sql,sql-server,tsql,Sql,Sql Server,Tsql,假设我有一个非常简单的表,如下所示: create table #People (ID_Num int, Gender char(1), Age int, Name varchar(50)) insert into #People values (7612,'M',38,'Joe') insert into #People values (2290,'F',17,'Sally') insert into #People values (93542,'F',38,'Frederica')
create table #People (ID_Num int, Gender char(1), Age int, Name varchar(50))
insert into #People values (7612,'M',38,'Joe')
insert into #People values (2290,'F',17,'Sally')
insert into #People values (93542,'F',38,'Frederica')
Column_Name |Value (For ID 7612) |Value (For ID 93542)
------------------------------------------------------
Gender |M |F
Age |38 |38
Name |Joe |Frederica
每个记录都有一个ID以及与该ID关联的属性
假设我要比较报表/表中的2条任意记录,如下所示:
create table #People (ID_Num int, Gender char(1), Age int, Name varchar(50))
insert into #People values (7612,'M',38,'Joe')
insert into #People values (2290,'F',17,'Sally')
insert into #People values (93542,'F',38,'Frederica')
Column_Name |Value (For ID 7612) |Value (For ID 93542)
------------------------------------------------------
Gender |M |F
Age |38 |38
Name |Joe |Frederica
我该怎么做?当我尝试创建类似于上面的东西时,我对PIVOT/UNPIVOT语法感到困惑,我需要两者吗
有没有一种方法可以对任意两个ID执行类似操作?这意味着,只要将ID插入变量/参数中,就可以对任意2条记录重复使用相同的代码
如果你想知道为什么我会遇到这些麻烦,而不是仅仅比较表中出现的两条记录:在我正确处理透视部分后,我还想进行筛选,这样我们只会看到有差异的列。例如上面,我会显示性别和姓名,但不会显示年龄。与编写SQL动态选择不同的列相比,筛选出值不同的行要容易得多。不,不幸的是,这不起作用。为了进行数据透视,您需要知道要以数据透视格式获取的列。在您的情况下,任意Id不允许您这样做。您可以按年份等透视数据 我会这样做:
select * from #people p1
left join #people p2 on p2.id_num<>p1.id_num
获取每一行并在更高级别的语言c、java、python等上进一步处理它
我可以问你为什么需要用这种方式格式化数据吗?可能有一些方法可以为此创建动态SQL,但总的来说,这是一种黑客行为,我不会这么做。使用SQL中的工具/命令更可能解决您的问题,您可能需要以某种方式重新表述它。如果您需要生成报告,我会在SQL之外进一步处理数据,使其适合您的报告格式 使用PIVOT,我们还可以根据我提供的表数据实现上述结果集 正常支点 动态轴:
随着越来越多的人向表中添加大量的列,这会变得很糟糕。如果你能用一些例子详细阐述你的最后一段,我相信我们可以制定一个更优雅的解决方案。只要我的两分钱。