2016-07-13 4 views
0

필자는 올해 여름에 회사에서 프로젝트를 진행하고 있으며, 여전히 대학원생이되기까지 많은 어려움을 겪고 있습니다. 내가 시도그룹/문제 별 주문 MSSQL

아무것도를 heres 내가 무엇을 지금까지 작동하는 것 같다 온라인 다른 가이드로 카운트

SELECT DISTINCT ACT.ROW_ID , ACT.CREATED , MEM.FIRST_NAME , MEM.LAST_NAME , LOC.NAME , COUNT(*) as "number" , CAT.NAME , SER.NAME , EMP.FIRST_NAME , EMP.LAST_NAME , SER.DURATION , ACT.CASH , COS.NAME , ACT.COMMENTS , ACT.TIP FROM 
S_ACTIVITY ACT, S_LOCATION LOC, S_CATEGORY CAT, S_EMPLOYEE EMP, S_SERVICE SER, S_COST_CODE COS, S_MEMBER MEM 
WHERE ACT.EMPLOYEE_ID = EMP.ROW_ID AND ACT.SERVICE_ID = SER.ROW_ID AND ACT.CATEGORY_ID = CAT.ROW_ID AND ACT.COST_CODE_ID = COS.ROW_ID AND 
ACT.LOCATION_ID = LOC.ROW_ID AND ACT.MEMBER_ID = MEM.ROW_ID 
GROUP BY LOC.NAME 
ORDER BY number 

그게 말을하고 난 (구문은 suuuuper하여/명령에 의해 그룹 엉망) 주문에 대한 몇 가지 종류 또는 개수가 필요합니다 ... 원래의 Heres ...

감사합니다, 많이 주셔서 감사합니다! :)

+2

(1) 불필요한 데이터베이스 태그를 제거했습니다. 실제로 사용하고있는 데이터베이스의 태그를 다시 추가하십시오. (2) 명시적이고 적절한'JOIN' 문법을 사용하는 방법을 배웁니다. 'FROM' 절의 쉼표는 읽기가 어렵습니다. –

+0

나는 이것을 읽기를 강력히 추천한다 : [시각적 표현의 SQL 조인] (http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins) –

+0

쿼리의'GROUP BY'와'ORDER BY' 절. – Uueerdo

답변

0

조인 -를 사용하여, 그들은 중대하다. 다음은 그 예이다 :

SELECT DISTINCT ACT.ROW_ID , ACT.CREATED , MEM.FIRST_NAME , MEM.LAST_NAME , LOC.NAME , CAT.NAME , SER.NAME , EMP.FIRST_NAME , EMP.LAST_NAME , SER.DURATION , ACT.CASH , COS.NAME , ACT.COMMENTS , ACT.TIP FROM 
S_ACTIVITY ACT, S_LOCATION LOC, S_CATEGORY CAT, S_EMPLOYEE EMP, S_SERVICE SER, S_COST_CODE COS, S_MEMBER MEM 
WHERE ACT.EMPLOYEE_ID = EMP.ROW_ID AND ACT.SERVICE_ID = SER.ROW_ID AND ACT.CATEGORY_ID = CAT.ROW_ID AND ACT.COST_CODE_ID = COS.ROW_ID AND 
ACT.LOCATION_ID = LOC.ROW_ID AND ACT.MEMBER_ID = MEM.ROW_ID 

SELECT DISTINCT ACT.ROW_ID, ACT.CREATED, MEM.FIRST_NAME, MEM.LAST_NAME, LOC.NAME, 
       CAT.NAME, SER.NAME, EMP.FIRST_NAME, EMP.LAST_NAME, SER.DURATION, 
       ACT.CASH, COS.NAME, ACT.COMMENTS, ACT.TIP 
FROM  S_ACTIVITY ACT 
INNER JOIN S_LOCATION LOC ON ACT.LOCATION_ID = LOC.ROW_ID 
INNER JOIN S_CATEGORY CAT ON ACT.CATEGORY_ID = CAT.ROW_ID 
INNER JOIN S_EMPLOYEE EMP ON ACT.EMPLOYEE_ID = EMP.ROW_ID 
INNER JOIN S_SERVICE SER ON ACT.SERVICE_ID = SER.ROW_ID 
INNER JOIN S_COST_CODE COS ON ACT.COST_CODE_ID = COS.ROW_ID 
INNER JOIN S_MEMBER MEM ON ACT.MEMBER_ID = MEM.ROW_ID 

고유이되다 - 고유은 SELECT 수정합니다. 결과를 별개의 행으로 제한하며 GROUP BY all_columns_here을 사용하는 것과 같습니다. 이것이 목표라면, GROUP BY을 완전히 제거하십시오. 위의 쿼리를 참조하십시오. 당신은 사용할 수 있습니다 중 하나 GROUP BY 또는 ORDER BY, 또는 둘 다 - 어떤

그룹으로/주문

으로 ... 마지막 지점으로 연결됩니다. 이들은 서로를 필요로하지 않습니다. 또한 GROUP BY은 집계가있는 경우 SQL에서만 필요하며 ORDER BY은 특정 기능에만 필요합니다. 그렇지 않으면 프로젝트 요구 사항을 충족시키기 위해 마음대로 사용할 수 있습니다.

+0

도움을 주셔서 감사합니다. 아직 주문해야 할 사항을 조금 수정했는데 논리적 인 문제가 있다고 생각합니다. 감사합니다. – Rolthar

0

당신이 새로운 것을 시작한 이래로 당신을 시작할 수있는 무언가가 있습니다. 환영합니다.

저는 Gordon과 Maciej의 의견을 읽고, JOINS에 대한 기사를 읽었습니다. 너의 연구에 행운을 빌어.

이것은 단지 JOIN에 대한 몇 가지 가정하에 MSSQL을 구문 적으로 수정 한 것입니다. 반드시 당신이 찾고있는 결과는 아닙니다. 명시

SELECT DISTINCT 
    ACT.ROW_ID, 
    ACT.CREATED, 
    MEM.FIRST_NAME, 
    MEM.LAST_NAME, 
    LOC.NAME, 
    COUNT(*) as "number", 
    CAT.NAME, 
    SER.NAME, 
    EMP.FIRST_NAME, 
    EMP.LAST_NAME, 
    SER.DURATION, 
    ACT.CASH, 
    COS.NAME, 
    ACT.COMMENTS, 
    ACT.TIP 
FROM 
    S_ACTIVITY ACT 
    INNER JOIN S_LOCATION LOC on ACT.LOCATION_ID = LOC.ROW_ID 
    INNER JOIN LOC. S_CATEGORY CAT ON ACT.CATEGORY_ID = CAT.ROW_ID 
    INNER JOIN S_EMPLOYEE EMP ON ACT.EMPLOYEE_ID = EMP.ROW_ID 
    INNER JOIN S_SERVICE SER ON ACT.SERVICE_ID = SER.ROW_ID 
    INNER JOIN S_COST_CODE COS ON ACT.COST_CODE_ID = COS.ROW_ID 
    INNER JOIN S_MEMBER MEM ON ACT.MEMBER_ID = MEM.ROW_ID 
GROUP BY 
    --every column that isn't an aggreggate... i.e. everything except COUNT(*). 
    ACT.ROW_ID, 
    ACT.CREATED, 
    MEM.FIRST_NAME, 
    MEM.LAST_NAME, 
    LOC.NAME, 
    CAT.NAME, 
    SER.NAME, 
    EMP.FIRST_NAME, 
    EMP.LAST_NAME, 
    SER.DURATION, 
    ACT.CASH, 
    COS.NAME, 
    ACT.COMMENTS, 
    ACT.TIP 
ORDER BY 
    --You can't use alias names in GROUP BY or ORDER BY clauses. 
    COUNT(*)