2013-12-09 1 views
1

내가 다음 예제 문자열을 말해봐 :특정 단어 위치 앞뒤에있는 단어를 바꿉니 까? (SQL 문)

SELECT a, b, c FROM table1 ORDER BY c 

어떻게 것 I 변화 SELECT a, b, cSELECT COUNT(a)에 또한 ORDER BY 절을 제거 (문자열 조작을 통해)?

내 코드에서 생성 된 쿼리를 가져 와서 쿼리 버전 COUNT()을 실행하고 전체 레코드에서 인쇄 된 것으로 표시된 레코드 수를 표시 할 수 있도록 수정해야합니다.

는 편집 :

내가 노동 조합을 수행하고있어 더 복잡한 쿼리를 말해봐. 위에 질문 한 것과 동일한 기능을 사용하려면 무엇을해야합니까? 첫 번째 SELECT 절을 COUNT(*)으로 변경하거나 ...?

SELECT a.memno, 
a.name, 
a.addr1, 
a.addr2, 
a.city, 
a.state, 
a.zip, 
a.sex, 
a.lname, 
a.ssan, 
b.addr1 as old_addr1, 
b.addr2 as old_addr2, 
b.city as old_city, 
b.state as old_state, 
b.zip as old_zip, 
b.timec 

FROM library1.table1 a, library1.table2 b 
WHERE a.memno = b.memno and 
b.groupid = 'P2' and 
b.type = 'B' and 
b.datec = 20131206 AND 
(a.addr1 <> b.addr1 or a.addr2 <> b.addr2 or a.city <> b.city or a. state <> b.state or a.zip <> b.zip) 
UNION 
SELECT 
a.memno, 
a.name, 
a.addr1, 
a.addr2, 
a.city, 
a.state, 
a.zip, 
a.sex, 
a.lname, 
a.ssan, 
b.addr1 as old_addr1, 
b.addr2 as old_addr2, 
b.city as old_city, 
b.state as old_state, 
b.zip as old_zip, 
b.timec 

FROM library2.table1 a, library2.table2 b 
WHERE a.memno = b.memno and 
b.groupid = 'N2' and 
b.type = 'B' and 
b.datec = 20131206 AND 
(a.addr1 <> b.addr1 or a.addr2 <> b.addr2 or a.city <> b.city or a. state <> b.state or a.zip <> b.zip) ORDER BY timec desc 
+0

나는 어떤 종류의 쿼리에도이 작업을 수행해야한다고 생각하십니까? 가능한 한 복잡한가? –

+0

기본적으로 ORDER BY 절을 삭제하고 'FROM'의 왼쪽에있는 모든 것을 새 부분으로 변경해야합니다. SELECT COUNT (a.memno)의 줄을 따라 가야합니다. –

답변

0

가능한 솔루션은 (당신이 ORDER 절 걱정하지 않는 것이, 가정) 계산을위한 하위 쿼리로 전체 쿼리를 넣어 수 :

SELECT COUNT(1) FROM (
    SELECT a, b, c FROM table1 ORDER BY c 
) 
+0

이것은 C#에서 문자열을 조작해야하지만 현재 내가 수행중인 작업에 적용됩니다. –

1

을 문자열이 정말 일치하는 경우

var input = "SELECT a, b, c FROM table1 ORDER BY c"; 
var output = input.Replace(
    input.Substring(0, input.IndexOf("FROM") - 1), 
    "SELECT COUNT(*)"); 

var orderByIndex = output.IndexOf("ORDER BY"); 
var output = output.Replace(
    output.Substring(orderByIndex, output.Length - orderByIndex), 
    ""); 

내가 여기에 내가 SELECT COUNT(*)을 사용하고 있습니다 알고 있지만 그 알고리즘을 간단하게 유지하기 위해입니다 : 하나의 방법은 될 것입니다. 다른 방법을 통해 키 필드를 쉽게 사용할 수 있다면 플러그인으로 연결하십시오.하지만 문자열에서 파싱해야하는 경우 파싱의 복잡성은 가치가 없습니다.

+0

내가 UNION을하고있는 위의 내 편집의 경우는 어떻습니까? 동일한 'COUNT (*)'기능을 사용하려면 어떻게 수정해야합니까? –

관련 문제