2016-12-27 6 views
0

ファイルの要求を保存する必要があるプロジェクトがあります。私は要求の状態を各ステップの日付で保存しなければならない。TSQL 1つの値を持つ要素を選択

私はデータベース内の2つのテーブルがあります:私はからの各ファイル名を取得するための要求を作成したいと思います

enter image description here

FileRequest:

enter image description here

FileRequestStatusをテーブルFileRequestはのみ0。所望の出力はこの場合C12345, LIVEとなります。

あなたは私のデータベースを構築するために、より良いアイデアを持っている場合、私はそれを取るよ

私はそのような何か試してみました:あなたはあなたのGROUP BY[FileName]を含める必要が

SELECT [FileName] FROM [FileRequest] 
INNER JOIN [FileRequestStatus] ON [FileRequestStatus].[RequestId] = [FileRequest].[RequestId] 
GROUP BY [FileRequestStatus].[RequestId] 
HAVING COUNT([FileRequestStatus].[RequestStatus]) < 2 

答えて

1
SELECT FR.FileName 
FROM [FileRequest] FR 
INNER JOIN [FileRequestStatus] FRS ON FRS.[RequestId] = FR.[RequestId] 
GROUP BY FR.FileName 
HAVING COUNT(CASE WHEN FRS.RequestStatus <> 'New' THEN 1 END) = 0 --No statuses other than `NEW` 
AND COUNT(CASE WHEN FRS.RequestStatus = 'New' THEN 1 END) >= 1 --Atleast one status `NEW` 
0

をあなたが結果でそれを選択することができます

SELECT [nep].[FileRequest].[FileName] FROM [nep].[FileRequest] 
INNER JOIN [nep].[FileRequestStatus] ON [nep].[FileRequestStatus].[RequestId] = [nep].[FileRequest].[RequestId] 
GROUP BY [nep].[FileRequestStatus].[RequestId], [nep].[FileRequest].[FileName] 
HAVING COUNT([nep].[FileRequestStatus].[RequestStatus]) < 2 
1

私は単純だと思います

select fr.FileName 
from nep.FileRequest fr join 
    nep.FileRequestStatus] frs 
    on frs.RequestId = fr.RequestId 
group by fr.FileName 
having min(frs.RequestStatus) = max(frs.RequestStatus) and 
     min(frs.RequestStatus) = 'New'; 

注:番目の方法は、集合体であるこれは(それは考慮に入れるのは簡単ですが)要求のステータスがNULL決してしないことを前提としています。

ファイル名ごとに集計し、指定されたファイルのステータスがすべて等しい(最初の条件)ことを確認し、'New'(2番目の条件)に等しいことを確認します。

+0

こんにちは、私は、vkpさん( 'FRS.RequestStatus <>' New 'THEN 1 END)= 0'の場合に文を使いました。あなたよりも優れていますか? 'min(frs.RequestStatus)= max(frs.RequestStatus)'を持っていますか? –

+0

@ XavierW。 。 。 。私にはもっと複雑に思えますが、それは本当に個人的な意見です。 –

+0

私は主張して申し訳ありませんが、私は本当に次の行のロジックを理解していません: 'min(frs.RequestStatus)= max(frs.RequestStatus)'を持っています。私に説明をお願いしますか?ステータスが1つしかない行がない場合はどうなりますか? 'min(frs.RequestStatus)'の値は '2'ですか? –

関連する問題