0

一連の値に対してカウントを実行しようとしていますが、カウントによって余分な値が取り込まれています。

ここにいくつかの背景情報があります。次の T-SQL クエリは、必要なデータを返します。

SELECT DISTINCT [REQ_INFO].UDAValue as 'UDA value', REQ_INFO.ProjectID, 
REQ_INFO.BaselineID, Req_ID
FROM [REQ_INFO]
INNER JOIN [Project_INFO] ON [REQ_INFO].[ProjectID]=[Project_INFO].[ProjectID]
INNER JOIN [Baseline_INFO]ON [REQ_INFO].[BaselineID]=[Baseline_INFO].[BaselineID]
WHERE [Project_INFO].[Name] = 'Address Book'
AND [Baseline_INFO].Name = 'Current Baseline'
AND [UDAName] = 'Requirement Priority'
ORDER BY REQ_INFO.Req_ID

これにより、次のデータが返されます。

ここに画像の説明を入力

また、UDA 値列に各値が何回出現するかをカウントする方法も必要です。上記のように、合計は 11 になるはずです。ただし、次のコードを試しましたが、余分な行がカウントされています:

SELECT [REQ_INFO].UDAValue as 'UDA value',COUNT (*) as 'UDA Num'
FROM [REQ_INFO]
INNER JOIN [Project_INFO] ON [REQ_INFO].[ProjectID]=[Project_INFO].[ProjectID] 
INNER JOIN [Baseline_INFO]ON [REQ_INFO].[BaselineID]=[Baseline_INFO].[BaselineID]
WHERE [Project_INFO].[Name] = 'Address Book' 
AND [Baseline_INFO].Name = 'Current Baseline'
AND [UDAName] = 'Requirement Priority'
GROUP BY REQ_INFO.UDAValue

ここに画像の説明を入力

私が間違っていることについて誰か提案がありますか?

4

3 に答える 3

2

distinct違いを引き起こしているのは、最初のクエリのステートメントである 可能性が最も高いように見えます。

探しているのが [REQ_INFO].UDAValue. 次に、最初のクエリから句を削除しdistinctて、2 番目のクエリが実際にカウントしているものを確認する必要があります。

別の方法として、このように最初のクエリのグループ化された値の合計数を確認できますが、それは最初と 2 番目のクエリの両方とは異なります。

SELECT [REQ_INFO].UDAValue as 'UDA value',COUNT (*) as 'UDA Num' 
FROM [REQ_INFO] 
INNER JOIN [Project_INFO] ON [REQ_INFO].[ProjectID]=[Project_INFO].[ProjectID]  
INNER JOIN [Baseline_INFO]ON [REQ_INFO].[BaselineID]=[Baseline_INFO].[BaselineID] 
WHERE [Project_INFO].[Name] = 'Address Book'  
AND [Baseline_INFO].Name = 'Current Baseline' 
AND [UDAName] = 'Requirement Priority' 
GROUP BY REQ_INFO.UDAValue, REQ_INFO.ProjectID, REQ_INFO.BaselineID, Req_ID

それがあなたが望むものであるかどうか、あなたの質問から判断するのは難しいです。表示される最初のクエリの値のカウントが本当に必要な場合 (4 つの列とすべてに影響する個別のステートメント)。次に、おそらくサブクエリでそれにアプローチします。

于 2012-06-13T16:25:08.997 に答える
2

カウントを変更して、個別のものを含めます。このようなもの:

SELECT [REQ_INFO].UDAValue as 'UDA value',COUNT (DISTINCT REQ_INFO.Req_ID) as 'UDA Num'
... rest of your query
于 2012-06-13T16:27:54.027 に答える
0

カウントを実行できるように一時テーブルを作成することで、問題を回避することができました。これは、私が使用した SQL ステートメントです。

DECLARE @UDAcount TABLE (UDAValue nvarchar(max), ProjectID int, 
BaselineID int, Req_ID int, Version nvarchar(128))

INSERT INTO @UDAcount (UDAValue, ProjectID, BaselineID, Req_ID, Version)
SELECT DISTINCT [REQ_INFO].UDAValue as 'UDA value', REQ_INFO.ProjectID, 
REQ_INFO.BaselineID, Req_ID, REQ_INFO.Version
FROM [REQ_INFO]
INNER JOIN [Project_INFO] ON [REQ_INFO].[ProjectID]=[Project_INFO].[ProjectID]
INNER JOIN [Baseline_INFO]ON [REQ_INFO].[BaselineID]=[Baseline_INFO].[BaselineID]
WHERE [Project_INFO].[Name] = 'Address Book'
AND [Baseline_INFO].Name = 'Current Baseline'
AND [UDAName] = 'Requirement Priority'
ORDER BY REQ_INFO.Req_ID

SELECT UDAValue as 'UDA value',COUNT (*) as 'UDA Num'
FROM @UDAcount
GROUP BY UDAValue

これは最も洗練されたソリューションではないかもしれませんが、望ましい結果が返されます。これを改善する方法について何か提案があれば、喜んでお聞きします。

于 2012-06-14T11:00:27.967 に答える