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