2012-11-29 2 views
0

SQL Server로 응용 프로그램 백 엔드를 거의 대체했지만 문제가 발생했습니다. 다음 Access 쿼리는 Sql Server에서 작동하지 않습니다.이 Access SQL 문을 SQL Server에서 작동하게하려면 어떻게해야합니까?

SELECT table1.* 
FROM table1 
     INNER JOIN (table2 
        INNER JOIN table3 
          ON (table2.custkey = table3.custkey) 
           AND (table2.sequence = table3.sequence)) 
       ON table1.account = table2.account 
WHERE ((LEFT(table2.keyid, 1) = 'B')) 
ORDER BY table3.lastname & table3.firstname, 
      table1.account; 

이 문장은 여러 변형을 시도했지만 제대로 작동하지 못했습니다. 이 성명서에 대한 도움은 내가 몇 가지 다른 것들을 수정하는데 도움이 될 것이다. 어떤 도움을 주시면 감사하겠습니다. 당신이 절은 인덱스에 적합하도록 곳을 원하는 경우에

+0

다른 한 가지 덧글입니다. ORDER BY에서 파생 필드 (성/이름)를 정렬합니다. 이렇게하면 db 엔진이 먼저 두 개의 필드를 결합하고 인덱싱되지 않은 결과를 정렬합니다. 대신에 table3.lastname, table3.firstname, ORDER BY를 수행 할 수 있습니다. table1.account 이렇게하면 결과는 같지만 빠릅니다. –

답변

2

튀어 나온 유일한 것은 SQL Server의 +이다 "&"입니다. 나는 처음부터 SQL Server의 쿼리를 작성한다면

SELECT table1.* 
FROM table1 
     INNER JOIN (table2 
        INNER JOIN table3 
          ON (table2.custkey = table3.custkey) 
           AND (table2.sequence = table3.sequence)) 
       ON table1.account = table2.account 
WHERE ((LEFT(table2.keyid, 1) = 'B')) 
ORDER BY isnull(table3.lastname,'') + isnull(table3.firstname,''), 
      table1.account; 

, 나는 아마 조인 할 것이다 : 그러나, 액세스의 &는 SQL Server의 ISNULL로 추가 처리를 필요로하는 빈 문자열로 NULL 값을 취급 연속적으로 괄호 안에 t2-t3을하기보다는 t1에 다시 합치십시오. 첫 번째 문자에 대한 테스트는 LIKE (개인 선호)로도 표현됩니다.

SELECT table1.* 
    FROM table1 
    JOIN table2 ON table1.account = table2.account 
    JOIN table3 ON table2.custkey = table3.custkey AND table2.sequence = table3.sequence 
    WHERE table2.keyid LIKE 'B%' 
ORDER BY isnull(table3.lastname,'') + isnull(table3.firstname,''), table1.account; 
+0

응답 해 주셔서 감사합니다. 변경 사항을 적용 했으므로 이제는 정상적으로 작동합니다. 그것은 "&"이었고, 나는 그 부분을 + 꽤 오랫동안 변화시켜야했다. 다시 한번 감사드립니다. –

1
SELECT table1.* 
FROM table1 
INNER JOIN table2 ON table1.account = table2.account 
INNER JOIN table3 ON (table2.custkey = table3.custkey) 
         AND (table2.sequence = table3.sequence) 
WHERE LEFT(table2.keyid, 1) = 'B' 
ORDER BY table3.lastname, table3.firstname, table1.account; 

, LIKE 사용하여 재 작성 :

SELECT table1.* 
FROM table1 
INNER JOIN table2 ON table1.account = table2.account 
INNER JOIN table3 ON (table2.custkey = table3.custkey) 
         AND (table2.sequence = table3.sequence) 
WHERE table2.keyid LIKE 'B%' 
ORDER BY table3.lastname, table3.firstname, table1.account; 
관련 문제