0

ユニットと部門で多数の患者を選択しようとしており、ユニット名で結果をグループ化したいのですが、このコードは実行されず、この質問のトピックとしてエラーが発生します。

SELECT TOP (100) PERCENT 
    Pat.PatName AS Name, 
    srvDiv.sgMType AS Perkhidmatan,
    Pat.PatMRank AS Pangkat, 
    Pat.PatMilitaryID AS [No# Tentera],
    unt.untName AS Unit,
    fct.pesStatusCode as StatusCode,
    fct.pesSignedDate AS SignedDate

FROM dbo.FactPES AS fct INNER JOIN 
    dbo.DimPatient AS Pat ON fct.pesPatID = Pat.PatID LEFT OUTER JOIN
    dbo.DimUnit AS unt ON fct.pesUnitID = unt.untID LEFT OUTER JOIN 
    dbo.DimServiceDiv AS srvDiv ON fct.pesServiceDivID = srvDiv.sgID 
GROUP BY unt.untName
HAVING (deas.diDate BETWEEN  
    CONVERT(DATETIME, @FromDate, 102) 
AND 
    CONVERT(DATETIME, @ToDate, 102))

unt.UntName が左の結合にあるため、結合の外では使用できないと思いますか? このように配置すると機能するため、少し混乱しています。

GROUP BY unt.untName, Pat.PatName, srvDiv.sgMType, 
    Pat.PatMRank, Pat.PatMilitaryID, unt.untName, 
    fct.pesStatusCode, fct.pesSignedDate

どんな助けでも大歓迎です

4

2 に答える 2

1

まず、使用しないでくださいTOP (100) PERCENT。読んでも痛い。

次に、クエリに集計関数が含まれていませSUMCOUNT。「ユニット名でグループ化」したいと言うとき、結果をユニット名でソートしたいだけかもしれません。その場合は、ORDER BY代わりに必要です。(何ができるかを研究するという他の人からのアドバイスgroup byはよく受け入れられます。)

CONVERT最後に、DBMS によっては、 これらの関数を最後に必要としない場合があります。

于 2013-04-21T05:45:51.393 に答える