2016-03-23 17 views
1

私は多くのカラムを持つテーブルを持っています。時々、2つの行の違いを見つける必要があります。私はちょうど画面をスクロールすることでそれをすることができますが、それは鈍いです。私は2行の値が異なるカラム名を取得

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" 

これを行う簡単な方法はありますか?

UPDATE

別の例たかったよう:

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" 

クエリ私は(表には、50以上の列だけでなく、7を持っている)持って何 結果:"Id, Col2, Col4"

か何かのように:今の私は、行が同じであるかどうかを確認するために50の以上の列をスクロールする必要が Id|Col2 |Col4 | =============== 1 |bbb |ddd | --------------- 2 |XXX |YYY |

、それは効率的でミスを起こしやすいではありません。私は、行自分より速くを比較しますので、私は SELECT (COMPARE Id1.Col1 with Id2.Col1 if different then print "Col1 differs", COMPARE Id1.Col2 with Id2.Col2...)のような任意の長いクエリを望んでいない。)このような

+2

さらにサンプルデータを追加し、それに応じて期待値を調整します。 – jarlh

+0

[2列の違いを取得する方法](http://stackoverflow.com/questions/3482033/how-to-get-difference-between-2-columns)の可能な複製 –

答えて

2

何か:

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 
0

この単純なを試してみてくださいクエリは、あなたを助けることがあります

SELECT (CASE WHEN a.col1 <> b.col1 THEN 'Different Col1' 
       WHEN a.col2 <> b.col2 THEN 'Different Col2' 
       ... 
       ELSE 'No Different' END) --You can add only required columns here 
    FROM xyz AS a 
    INNER JOIN xyz AS b ON b.id = 1 --First Record 
    WHERE a.id = 2 --Second record to compare 
0

SQL Server 2012を使用している場合は、LEAD/LAGウィンドウを使用してこれを行うこともできます。 MSDNリファレンスはこちら - https://msdn.microsoft.com/en-us/library/hh213125.aspx

select 
id, 
col1, 
col2, 
col3, 
col4, 
stuff(diff_cols,len(diff_cols-1),1,'') diff_cols 
from 
(
SELECT 
id, 
col1, 
col2, 
col3, 
col4, 
concat 
(
'Different columns:', 
CASE 
WHEN LEAD(id, 1,0) OVER (ORDER BY id) <> id THEN 'id,' 
WHEN LEAD(col1, 1,0) OVER (ORDER BY id) <> col1 THEN 'col1,' 
WHEN LEAD(col2, 1,0) OVER (ORDER BY id) <> col2 THEN 'col2,' 
WHEN LEAD(col3, 1,0) OVER (ORDER BY id) <> col3 THEN 'col3,' 
WHEN LEAD(col4, 1,0) OVER (ORDER BY id) <> col4 THEN 'col4,' 
) diff_cols 
FROM xyz 
) tmp 
関連する問題