Sql 逐行比较一个表上的两列

Sql 逐行比较一个表上的两列,sql,Sql,我有两张这样的桌子 表1 ColumnA ColumnB ColumnC ............. ------- ------- 1.003 .. 0.423 .. 3 .. 2.09 .. 122 .. 1.1 .. .. .. ..

我有两张这样的桌子

表1

    ColumnA    ColumnB    ColumnC   .............
    -------    -------     
     1.003       .. 
     0.423       ..
     3           ..
     2.09        ..
     122         ..
     1.1         ..
      ..         .. 
      ..         ..
      ..         ..
表2

 Column1     Column2
 -------     -------
   ..        2.399
   ..        1.012412
   ..        4.3323
   ..        6
   ..        0
   ..        30000
   ..         .. 
   ..         .. 
   ..         .. 
表1有300万行,表2有50万行。我想比较columnA和column2

好的,怎么比较?这样地; 表1第1行:

    1.003>2.399  then set val1=val1+1 OR 1.003=2.399 then set val2=val2+1 OR 
1.003<2.399 then set val3=val3+1 

    1.003>1.012412 then set val1=val1+1 OR  1.003=1.012412 then set val2=val2+1 OR
1.003<1.012412 then set val3=val3+1 

    1.003>4.3323  then set val1=val1+1 OR 1.003=4.3323 then set val2=val2+1 OR
1.003<4.3323 then set val3=val3+1

    1.003>6  then set val1=val1+1 OR 1.003=6 then set val2=val2+1 OR 
1.003<6 then set val3=val3+1

    1.003>0 then set val1=val1+1 OR 1.003=0 then set val2=val2+1 OR 
1.003<0 then set val3=val3+1

    1.003>30000 then set val1=val1+1 OR 1.003=30000 then set val2=val2+1 OR 
1.003<30000 then set val3=val3+1
                     ........................
                     ........................the end of the table2
1.003>2.399,然后设置val1=val1+1或1.003=2.399,然后设置val2=val2+1或
1.0031.012412然后设置val1=val1+1或1.003=1.012412然后设置val2=val2+1或
1.0034.3323然后设置val1=val1+1或1.003=4.3323然后设置val2=val2+1或
1.0036然后设置val1=val1+1或1.003=6,然后设置val2=val2+1或
1.0030然后设置val1=val1+1或1.003=0,然后设置val2=val2+1或
1.00330000然后设置val1=val1+1或1.003=30000然后设置val2=val2+1或
1.0032.399然后设置val1=val1+1或0.423=2.399,然后设置val2=val2+1或
0.4231.012412然后设置val1=val1+1或0.423=1.012412然后设置val2=val2+1或
0.4234.3323然后设置val1=val1+1或0.423=4.3323然后设置val2=val2+1或
0.4236然后设置val1=val1+1或0.423=6,然后设置val2=val2+1或
0.4230然后设置val1=val1+1或0.423=0然后设置val2=val2+1或
0.42330000然后设置val1=val1+1或0.423=30000然后设置val2=val2+1或
0.4232.399,然后设置val1=val1+1或3=2.399,然后设置val2=val2+1或
31.012412然后设置val1=val1+1或3=1.012412然后设置val2=val2+1或
34.3323然后设置val1=val1+1或3=4.3323然后设置val2=val2+1或
36然后设置val1=val1+1或3=6,然后设置val2=val2+1或
30然后设置val1=val1+1或3=0,然后设置val2=val2+1或
330000然后设置val1=val1+1或3=30000,然后设置val2=val2+1或

3我相信你可以用一句话做到这一点:

SELECT COUNT(CASE WHEN t1.columnA>t2.column2 THEN 1 ELSE NULL END) val1,
       COUNT(CASE WHEN t1.columnA=t2.column2 THEN 1 ELSE NULL END) val2,
       COUNT(CASE WHEN t1.columnA<t2.column2 THEN 1 ELSE NULL END) val3
  FROM table1 t1
  JOIN table2 t2
SELECT COUNT(t1.columnA>t2.column2然后1 ELSE NULL END时的情况)val1,
计数(当t1.columnA=t2.column2时为1,否则为空结束)val2,
计数(t1.columnA t2.column2时的情况;

…好吧,它是什么系统?您有来自多个不同系统的标签。到目前为止,您尝试了什么?这是一个比最初出现的更棘手的
UPDATE
语句,因为您无法按照您的描述(无论如何都不整洁地)按程序添加内容.考虑到您的起始样本数据,实际结果表应该是什么样的?我们需要某种方法来检查结果…系统对我来说并不重要,但Sybase iq是合适的…表1和表2没有id一样的列…因此其他列不必要。那么您使用的是sql?mysql?哪种语言?val1、val2、val3是什么be?那是col1,col2,col3吗?val1 val2 val3只是一个变量,比如计数器。好的,请帮助我使用sql。好的,然后请删除所有其他你不使用的标记,比如mysql,tsql。这是一个非常简单的答案,但却是真的。我真的很愚蠢。非常感谢你。我通常更喜欢SUM(但那只是我:P@JohnRuddell是的,我可以放弃这一点,但如果可能的话,我会尝试在计数时使用COUNT,在求和时使用SUM,只是为了可读性。再次非常感谢你:)
3>2.399  then set val1=val1+1 OR 3=2.399 then set val2=val2+1 OR 
3<2.399 then set val3=val3+1 

    3>1.012412 then set val1=val1+1 OR  3=1.012412 then set val2=val2+1 OR
3<1.012412 then set val3=val3+1 

    3>4.3323  then set val1=val1+1 OR 3=4.3323 then set val2=val2+1 OR
3<4.3323 then set val3=val3+1

    3>6  then set val1=val1+1 OR 3=6 then set val2=val2+1 OR 
3<6 then set val3=val3+1

    3>0 then set val1=val1+1 OR 3=0 then set val2=val2+1 OR 
3<0 then set val3=val3+1

    3>30000 then set val1=val1+1 OR 3=30000 then set val2=val2+1 OR 
3<30000 then set val3=val3+1
                     ........................
                     ........................the end of the table2
SELECT COUNT(CASE WHEN t1.columnA>t2.column2 THEN 1 ELSE NULL END) val1,
       COUNT(CASE WHEN t1.columnA=t2.column2 THEN 1 ELSE NULL END) val2,
       COUNT(CASE WHEN t1.columnA<t2.column2 THEN 1 ELSE NULL END) val3
  FROM table1 t1
  JOIN table2 t2
SELECT COUNT(*) FROM table1 t1 JOIN table2 t2 ON t1.columnA < t2.column2;
SELECT COUNT(*) FROM table1 t1 JOIN table2 t2 ON t1.columnA = t2.column2;
SELECT COUNT(*) FROM table1 t1 JOIN table2 t2 ON t1.columnA > t2.column2;