2012-07-06 162 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