2012-07-09 5 views
-2

한 카운트 조건 일 경우 어떻게 작동시키는 지 알고 있습니다. 여러 조건에서 작동하게하려면 어떻게해야합니까?두 개 이상의 SQL select count

SELECT count(TableName.DeviceName where DeviceName like 'AR%') as DEVICE_Type_A, 
     count(TableName.DeviceName where DeviceName like 'R%') as DEVICE_Type_B, 
     count(TableName.DeviceName where DeviceName like 'P%') as DEVICE_Type_C, 
     count(TableName.DeviceName where DeviceName like 'AM%') as DEVICE_Type_D, 
    FROM DB.TableName TableName 
WHERE TableName.DURATIONMIN > '180' 
+1

당신의 질문은 무엇입니까? – Jesse

+0

글쎄, 당신의 질문은 정말 당신이 달성하려고하는 것에 대해 많이 지정하지 않니? – rvphx

답변

6

당신이 경우 문을 사용한다!

SELECT count(case when DeviceName like 'AR%' then 1 end) as DEVICE_Type_A, 
     count(case when DeviceName like 'R%' then 1 end) as DEVICE_Type_B, 
     count(case when DeviceName like 'P%' then 1 end) as DEVICE_Type_C, 
     count(case when DeviceName like 'AM%' then 1 end) as DEVICE_Type_D 
FROM DB.TableName TableName 
WHERE TableName.DURATIONMIN > '180' 

난의 수를 왼쪽 개인적으로, 나는 "합"명확 생각한다.

SELECT sum(case when DeviceName like 'AR%' then 1 else 0 end) as DEVICE_Type_A, 
     sum(case when DeviceName like 'R%' then 1 else 0 end) as DEVICE_Type_B, 
     sum(case when DeviceName like 'P%' then 1 else 0 end) as DEVICE_Type_C, 
     sum(case when DeviceName like 'AM%' then 1 else 0 end) as DEVICE_Type_D 
FROM DB.TableName TableName 
WHERE TableName.DURATIONMIN > '180' 
+0

고마워요, 당신은 평생을 구하는 사람입니다. 왜 그런지 묻지 않고 답변을 할 수 있다면 tablename.column을 두지 않고 합계 괄호로 작업 한 이유가 생겼습니다. – Mowgli

+1

하나의 테이블 인 경우 별칭은 선택 사항입니다. 방금 SQL을 더 읽기 쉽도록 제거했습니다. 실제로는 테이블 별칭을 포함해야하므로 나쁜 습관임을 인정합니다. 그러나 별명을 이름과 동일하게 만드는 것은 불필요합니다. 대신 "TableName"을 불러 일으키는 "tn"과 같은 간단한 약어를 사용하면 훨씬 짧아집니다. –

+0

감사합니다. 20 개가 넘는 DB와 1000 개가 넘는 Table을 합하여 작업하고 있기 때문에 다시 포함 할 것입니다. – Mowgli

1

당신은 부속 선택을 사용해야합니다

SELECT 
    (SELECT count(*) form TableName.DeviceName where DeviceName like 'AR%') as DEVICE_Type_A, 
    (SELECT count(*) from TableName.DeviceName where DeviceName like 'R%') as DEVICE_Type_B, 
    (SELECT count(*) from TableName.DeviceName where DeviceName like 'P%') as DEVICE_Type_C, 
    (SELECT count(*) from TableName.DeviceName where DeviceName like 'AM%') as DEVICE_Type_D, 
FROM DB.TableName TableName 
WHERE TableName.DURATIONMIN > '180' 
+0

도움을 주셔서 감사하지만 "System.Data.OleDb.OleDbException : 테이블이 존재하지 않습니다."ORA-00942 : 테이블 또는 뷰가 " – Mowgli

+0

에 존재하지 않습니다.이 오류에서 데이터베이스 스키마를 알지 못합니다. 테이블이 없습니다 (예 : 오타). –

+0

도와 주신 코드로 놀아 보겠습니다. 다시 감사드립니다. – Mowgli