2016-07-21 3 views
1
내가 SAS를 통해 SQL에 접근하고있어

, 나는 같은 이름 열이있는 테이블을 통해 찾고 있어요 :이름을 지정하지 않고 수백 개의 열을 검색 중입니까?

a1 a2 a3 ... a500 b1 ... b500 
1022 1025 1184  1011 1085  1542 
1965 1547 1242  1354 1874  1745 

내가 어디에서나 A * 열 두 개의 별도의 코드가 행을 찾기 위해 노력하고있어 함께 행 :

where (a1...a500) like 1022 and (a1...a500) like 1184 

이름을 지정하지 않고이 열을 모두 검색하려면 어떻게해야합니까?

+0

어떻게 SQL에 액세스합니까? 예 : Pass-Through 또는 Libname – Longfish

답변

0

열을 열거하고 이름이있는 목록을 생성 할 수 있습니다. 그런 다음 쿼리를 구성하고 sp_executesql에 전달 :

DECLARE @ColumnList NVARCHAR(1024) = '' -- Adjust the length as need 

SELECT @ColumnList = @ColumnList + COLUMN_NAME + ', ' 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YourTable' AND COLUMN_NAME like 'a%' 

SET @ColumnList = SUBSTRING(@ColumnList, 0, LEN(@ColumnList)) 

--PRINT @ColumnList 

DECLARE @Sqltext NVARCHAR(1024) = 'SELECT * FROM YourTable WHERE (1022 IN (' + @ColumnList + ')) AND (1184 IN (' + @ColumnList + '))' 

--PRINT @SqlText 

EXEC sp_executesql @SqlText 
1

는 여러 컬럼에서 값을 찾기 위해 WHICHN() 기능을 사용할 수 있습니다.

data want; 
    set have; 
    where whichn(1022, of a1-a500) and whichn(1184, of a1-a500); 
run; 

"SQL"에 의한 경우, 당신은 당신이 PROC의 SQL 코드에서 변수 목록을 사용할 수 없기 때문에 다음이 작동하지 않습니다 PROC SQL을 사용하려는 의미한다. 대신 데이터 세트 옵션에서 사용할 수 있습니다.

proc sql ; 
    create table want as 
    select * 
    from have(where=(whichn(1022, of a1-a500) and whicn(1184, of a1-a500))) 
    ; 
quit; 

"SQL"에 의해 당신은 당신의 데이터를 SAS 데이터 세트에서 아니지만, 대신에 내가 SAS 밀어 수 있다는 것을 의심 원격 데이터베이스에서 액세스되고 있음을 의미하는 경우 WHERE 그 원격 SQL 데이터베이스에 절. 따라서 SAS는 모든 행을 SAS로 가져 와서 필터를 적용 할 수 있어야합니다.

관련 문제