2012-07-06 160 views
1

存在兩個表中的列。在表1中,該列包含二進制形式(int),10的值,而另一個表包含形式爲'Y''N'的列。比較SQL中不同類型的不同表中的兩列

本質上,我需要顯示錶1中的行,其中包含的值與表2中該列的值不同。我如何計算1到Y和0到N進行比較?

實施例:

表1:

DateRecorded SchoolName StudentName isAbsent hasPassed 
------------ ---------- ----------- -------- --------- 
2011-04-03 ABC  John  Y  Y 
2011-04-05 ABC  John  N  Y 

表2:

DateRecorded SchoolName StudentName isAbsent hasPassed 
------------ ---------- ----------- -------- --------- 
2011-04-03 ABC  John  0  1 
2011-04-05 ABC  John  0  1 

應返回行:

2011-04-03 ABC  John  Y  Y 

從表1,因爲這行與衝突的同一排我否表2.

+0

首先,它要麼SQL Server 2008或2012,沒有SQL Server 2010中除此之外,你在這些表中有一些共同的列嗎?如同在column1的相同值中,您需要查看您的二進制列在兩個表上的值是否相同? – Lamak 2012-07-06 04:19:50

+0

嗨拉馬克感謝您的評論。是的,我的錯誤,我正在使用的2008 R2。實際上,我有兩個表應該是相同的表,但1個表包含1和0格式的所有數據,而另一個表包含Y和N格式的所有數據。現在我需要確定是否有包含衝突數據的行。對於例如如果列在表1中列爲'1'並且在表2中列爲'N',我需要查明。 – user1505695 2012-07-06 04:26:35

+0

@ user1505695爲了給您一個準確的答案,我們需要了解有關表格的更多信息。請張貼您的表架構,並可能是一個示例數據集。 – 2012-07-06 04:33:13

回答

4

試試這個:

SELECT * FROM tbl1 

EXCEPT 

SELECT 
    daterecorded, 
    schoolname, 
    studentname, 
    CASE isAbsent WHEN 1 THEN 'Y' WHEN 0 THEN 'N' END AS isAbsent, 
    CASE hasPassed WHEN 1 THEN 'Y' WHEN 0 THEN 'N' END AS hasPassed 
FROM tbl2 

SQL-Fiddle Demo

+0

嘿贊恩,謝謝你的努力。我嘗試過,但它產生了一個非常不同的結果,比我的初始數據更多的條目。我已添加評論以幫助更好地瞭解我的情況。再次感謝你的幫助。 – user1505695 2012-07-06 04:29:25

+0

@ user1505695已編輯的解決方案,現在嘗試 – 2012-07-06 04:57:26

+0

zane我會嘗試你的解決方案,並得到bk給你。感謝您的幫助:) – user1505695 2012-07-06 05:19:20