sql - 获取两行值不同的列名

标签 sql sql-server database

我有一个包含很多列的表格。有时我需要找出两行之间的差异。我可以通过滚动屏幕来完成,但它很乏味。我正在寻找可以为我执行此操作的查询,例如

SELECT columns_for_id_1 != columns_for_id_2
FROM  xyz
WHERE id in (1,2)

表:

id col1 col2 col3 col4
1  qqq  www  eee  rrr
2  qqq  www  XXX  rrr

结果:

"Different columns: id, col3"

有没有简单的方法来做到这一点?

更新

另一个想要的例子: 我有什么(表格有超过 50 列,而不是只有 7 列):

Id| Col1 | Col2 | Col3 | Col4 | Col5 | Col6 |
==============================================
1 | aaa  | bbb  | ccc  | ddd  | eee  | fff  |
----------------------------------------------
2 | aaa  | XXX  | ccc  | YYY  | eee  | fff  |

查询:

SELECT *
FROM table
WHERE Id = 1 OR Id = 2 
AND "columns value differs"

查询结果:"Id, Col2, Col4"

或者像这样: 编号|列 2 |列 4 | =============== 1 |bbb |ddd | -------------- 2 |XXX |YYY |

现在我必须滚动 50 多个列以查看行是否相同,效率不高且容易出错。我不想像这样的任何长查询 SELECT(比较 Id1.Col1 与 Id2.Col1,如果不同则打印“Col1 不同”,比较 Id1.Col2 与 Id2.Col2...) 因为我自己比较行会更快;)

最佳答案

像这样:

SELECT col, MIN(VAL) AS val1, MAX(val) AS val2
FROM (
SELECT id, val, col
FROM (
   SELECT id,  [col1], [col2], [col3], [col4]
   FROM mytable
   WHERE id IN (1,2)) AS src
UNPIVOT (
   val FOR col IN ([col1], [col2], [col3], [col4])) AS unpvt ) AS t
GROUP BY col 
HAVING MIN(val) <> MAX(val)

输出:

col  val1 val2
================
col3 eee  XXX

关于sql - 获取两行值不同的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36173453/

相关文章:

mysql - 查询未按预期运行

mysql - 在 SQL 查询中将 IN 值添加到表中

sql-server - 如何在 SQL Server 中的现有列上添加默认约束

sql - REST API体系结构: How to Represent Joined Tables

mysql - SSMA MySql 到 MsSql 空值错误

c# - 将 MySqlDbType 字段映射到 MySQL 关键字

sql - 在 SQL Server 数据库中的非 IDENTITY 类型字段中重新分配 ID

sql - 使用 INNER Join 更新查询

MySQL:添加具有 NULL 值的列

c# - 有没有办法检查数据库中是否存在随机生成的数字? C#