比较SQL中不同类型的不同表中的两列

比较SQL中不同类型的不同表中的两列,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,有一列存在于两个表中。在表1中,此列包含二进制形式的值(int)、1和0,而另一个表包含形式为'Y'和'N'的列 本质上,我需要显示表1中的行,这些行包含的值与表2中该列的值不同。如何计算1到Y和0到N进行比较 例如: 表1: DateRecorded SchoolName StudentName isAbsent hasPassed ------------ ---------- ----------- -------- --------- 2011-04-03 ABC Jo

有一列存在于两个表中。在表1中,此列包含二进制形式的值(
int
)、
1
0
,而另一个表包含形式为
'Y'
'N'
的列

本质上,我需要显示表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
由于该行与表2中的同一行冲突,请从表1中删除。

尝试以下操作:

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

试试这个:

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 Server 2008就是2012,没有SQL Server 2010。除此之外,这些表上是否有其他相同的列?例如,对于column1的相同值,您需要查看您的二进制列在两个表上是否具有相同的值?hi lamak,谢谢您的评论。是的,我错了,我用的是2008 R2。实际上,我有两个表,它们应该是相同的表,但是一个表包含1和0格式的所有数据,而另一个表包含Y和N格式的所有数据。现在我需要找出是否有一行包含冲突数据。例如,我需要找出,如果列在表1中被列为“1”,在表2中被列为“N”。@user1505695要给您一个准确的答案,我们需要了解有关您的表的更多信息。请发布您的表模式,当然:表1:DateRecorded School Name StudentName isAbsent已通过2011-04-03 ABC John Y Y 2011-04-05 ABC John N Y表2:DateRecorded School Name StudentName isAbsent已通过2011-04-03 ABC John 0 1 2011-04-05 ABC John 0 1应返回行:2011-04-03 ABC John Y Y Y,因为此行与表2 resultshmm仍在尝试格式化它…:/不知道为什么它不工作…首先,它不是SQL Server 2008就是2012,没有SQL Server 2010。除此之外,这些表上是否有其他相同的列?例如,对于column1的相同值,您需要查看您的二进制列在两个表上是否具有相同的值?hi lamak,谢谢您的评论。是的,我错了,我用的是2008 R2。实际上,我有两个表,它们应该是相同的表,但是一个表包含1和0格式的所有数据,而另一个表包含Y和N格式的所有数据。现在我需要找出是否有一行包含冲突数据。例如,我需要找出,如果列在表1中被列为“1”,在表2中被列为“N”。@user1505695要给您一个准确的答案,我们需要了解有关您的表的更多信息。请发布您的表模式,当然:表1:DateRecorded School Name StudentName isAbsent已通过2011-04-03 ABC John Y Y 2011-04-05 ABC John N Y表2:DateRecorded School Name StudentName isAbsent已通过2011-04-03 ABC John 0 1 2011-04-05 ABC John 0 1应返回行:2011-04-03 ABC John Y Y Y,因为此行与表2 resultshmm仍在尝试格式化它…:/不知道为什么不行…嘿,赞恩,谢谢你的努力。我试过了,但它产生了一个非常不同的结果,比我的初始数据有更多的条目。我添加了一条评论,以帮助更好地了解我的情况。再次感谢您的帮助。@user1505695已编辑的解决方案,请立即试用。我将试用您的解决方案并将bk发送给您。谢谢你的帮助:)啊,这太棒了!这样,您甚至不需要知道哪些是关键列。@AndriyM,谢谢。我仍然希望我们有
SELECT*排除col1,col2
=Phey zane,谢谢你的努力。我试过了,但它产生了一个非常不同的结果,比我的初始数据有更多的条目。我添加了一条评论,以帮助更好地了解我的情况。再次感谢您的帮助。@user1505695已编辑的解决方案,请立即试用。我将试用您的解决方案并将bk发送给您。谢谢你的帮助:)啊,这太棒了!这样,您甚至不需要知道哪些是关键列。@AndriyM,谢谢。我仍然希望我们有
SELECT*排除col1,col2
=P