2014-01-17 2 views
0

나는 thhree 테이블이 필드 이름 : 코드 블록계수 필드는

세 개의 테이블에서 세 개의 필드가 발생하는 횟수를 계산 중입니다. 나는 (그것을 확실히 BTW 작동)이 SQL 쿼리를 작성 : 세 개의 테이블의 각 필드의 발행 수를 계산 즉 ..

Entity  quantity 
----------- ----------- 
codeblocks 3 
Definitions 4 
Subjects 2 

:

SELECT Entity, COUNT(FieldToCount) AS quantity 
FROM (SELECT Entity, FieldToCount 
    FROM (SELECT 'Subjects' AS Entity, COUNT(term) AS FieldToCount 
     FROM   dbo.subjects 
     GROUP BY term 
     UNION ALL 
     SELECT  'Definitions' AS Entity, COUNT(what) AS FieldToCount 
     FROM   dbo.definitions 
     GROUP BY what 
     UNION ALL 
     SELECT  'codeblocks' AS Entity, COUNT(codeblock) AS FieldToCount 
     FROM   dbo.codeblocks 
     GROUP BY codeblock) AS SUMTABLE) AS REPORT 
GROUP BY Entity, FieldToCount 

이 결과를 얻었다.

이제 어떻게이 쿼리를 더 작고 우아하게 작성할 수 있습니까? 또는 여러 테이블에서 필드의 발생을 계산하는 최소 또는보다 우아한 방법은 무엇입니까?

(거래의 SQL에서)

+3

여러 개의 SQL을 선택하면 쿼리가 복잡해질 수 있습니다. 이 경우 노동 조합으로 내부 선택 만하면됩니다. – IndoKnight

+0

좋습니다. 고마워요. 여기에서 전체 솔루션을 설명하십시오 (tommy_o와 같이 끝까지 배치했습니다). UNION 연산자는 여러 select 문의 결과를 결합하는 데 사용됩니다. 각 SELECT 문은 동일한 수의 열을 쿼리해야합니다. 쿼리되는 열은 모두 동일한 데이터 형식을 가져야하며 각 쿼리에서 동일한 순서로 있어야합니다. 다음 세 가지 select 문을 수행합니다. 하나는 각 테이블에 대해, 그리고 Union All의 도움으로 결과를 연결합니다 (어떤 종류의 조인입니까?). – netfed

답변

1
SELECT 'Subjects' AS Entity 
     , count(term) AS FieldToCount 
FROM  dbo.subjects 
UNION ALL 
SELECT 'Definitions' AS Entity 
     , count(what) AS FieldToCount 
FROM  dbo.definitions 
UNION ALL 
SELECT 'codeblocks' AS Entity 
     , count(codeblock) AS FieldToCount 
FROM  dbo.codeblocks 

나는 게으른 일부 SYS 테이블에 대해이 테스트 : 다른 요구 사항이있는 경우

SELECT 'Subjects' AS Entity 
     , count(name) AS FieldToCount 
FROM sys.tables 
-- 
UNION ALL 
SELECT 'Definitions' AS Entity 
     , count(name) AS FieldToCount 
FROM sys.columns 
-- 
UNION ALL 
SELECT 'AnotherChoice' AS Entity 
     , count(object_id) AS FieldToCount 
FROM sys.tables 

확실하지,하지만이 작동하는 것 같다.

+0

예. 이해 했어. 이 설명에 감사드립니다. 이 방법은 조금 더 짧습니다. – netfed

+0

완벽합니다. 그리고 그 결과 세 라인이 효과적으로 마무리되었습니다. – netfed