2016-07-13 18 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 

thatsは言っていた私(構文はsuuuuperによって/順序でグループのために台無しにされました) ...助けを

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 
GROUP BY LOC.NAME 
ORDER BY LOC.NAME 

おかげでいくつかの並べ替えを必要に応じて、または発注... 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

あなたが初めてだから始めることができます。ようこそ、BTW。

私は本当に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(*) 
関連する問題