Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何透视数据以比较具有任意ID的2条记录?_Sql_Sql Server_Tsql - Fatal编程技术网

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,我们还可以根据我提供的表数据实现上述结果集 正常支点

动态轴:


随着越来越多的人向表中添加大量的列,这会变得很糟糕。如果你能用一些例子详细阐述你的最后一段,我相信我们可以制定一个更优雅的解决方案。只要我的两分钱。