سؤال

لدي جدولين مع أعمدة متعددة.الآن أريد أن دمجها باستخدام مثل المشغل.قانون بلدي مثل التالية

proc sql;

    select a.*,b.*
    from tera.SFTP as a,home.SFTP_1 as b
    where a.zip_c like ('%b.zip_extract%')

;
quit;

أنا على الحصول على فاصل صفحات الرسائل ولا يتم إرجاع النتيجة.العمود أنواع لفترة.zip_c هو شار و طول 50 في حين ب.zip_extract لها شار مع طول 6.

هل كانت مفيدة؟

المحلول

دمج على like ليست فكرة رائعة ، لا تستخدم المؤشرات و لا يستخدم الكثير من التحسينات يمكنك الحصول على خلاف ذلك.ولكن في بعض الأحيان أنه من الضروري.

في ساس ، على الرغم من أن أفعل هذا بشكل مختلف [و في معظم SQLs...]

proc sql;

    select a.*,b.*
    from tera.SFTP as a,home.SFTP_1 as b
    where find(a.zip_c,b.zip_extract)
;

quit;

أن يحقق نفس الشيء مثل, ولكن من المرجح أن تسمح SAS استخدام المؤشرات و التحسينات و هو أكثر مكتوبة بشكل واضح.

للتعامل مع طول العمود قضايا استخدام تقليم:

data have_a;
 length zip_c $50;
 input @1 zip_c $50.;
 datalines;
12345 99999
67890 99999
88001 99999
37013 99999
60037 99999
;;;;
run;

data have_b;
 length zip_extract $7;
 input zip_extract $;
 datalines;
12345
37013
99998
;;;;
run;

proc sql;
  title "No Rows!";
    select a.*,b.*
    from have_a as a,have_b as b
    where find(a.zip_c,b.zip_extract)
;

quit;
proc sql;
  title "Rows!";
    select a.*,b.*
    from have_a as a,have_b as b
    where find(a.zip_c,trim(b.zip_extract))
;

quit;

نصائح أخرى

المشكلة هي أنك مطابقة على سلسلة b.zip_extract ، وليس العمود.

محاولة:

select a.*,b.*
from tera.SFTP as a,home.SFTP_1 as b
where a.zip_c like '%' || b.zip_extract || '%'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top