レポート ビルダーでフィールドを使用するには、SQL Server データベースで複数のテーブルを結合する必要があります。この SQL クエリは、ストアド プロシージャとして実行されます。問題は、重複と見なす複数の行が返されることです。
これが私のクエリです(いくつかの構造部分が取り出されました):
ALTER PROCEDURE [dbo].[GetRollCallData]
@Ids VARCHAR(255),
@LexiconId INT,
@UUID UNIQUEIDENTIFIER,
@ReadOnly INT
AS
DECLARE @TableCode INT
SET @TableCode = 58
EXEC InsertInSelectionCache @Ids, @UUID, @TableCode, 0
SELECT [File].*, FileType2Lexicon.Label as FileTypeLabel, [People].DefaultPhone, CFV.Value as DOA, CFV.CustomRecordsetId
FROM FileType2Lexicon, SelectionCache, [People], [File]
INNER JOIN [CustomRecordSet]
ON [CustomRecordset].RecordId = [File].Id
INNER JOIN (SELECT Value, CustomFieldId, CustomRecordsetId FROM [CustomFieldValue]) CFV
ON [CustomRecordset].Id = CFV.CustomRecordsetId
INNER JOIN (SELECT CustomFieldId, Label FROM [CustomField2Lexicon]) CF2L
ON CF2L.CustomFieldId = CFV.CustomFieldId
WHERE [File].Id = SelectionCache.RecordId
AND SelectionCache.UUID = @UUID
AND SelectionCache.TableCode = @TableCode -- this is the code for File table
AND [File].Id <> 0
AND [File].FileTypeId = FileType2Lexicon.FileTypeId
AND FileType2Lexicon.LexiconId = @LexiconId
AND [File].ClientIdString = [People].ClientIdString
AND CFV.Value <> ''
AND CF2L.Label = 'Date of Arrest'
これは最終的に返されます:
Id ShortFileNameMatterName Summary FileTypeLabelDefaultPhone DOA CustomRecordsetId
4691 Bob State v. Bob RETAINED:1/1/2013 Criminal (123) 242-8454 2013-01-16 6942
4691 Bob State v. Bob RETAINED:1/1/2013 Criminal (123) 242-8454 2013-01-16 6948
明らかなように、recordsetId 列が原因で行が重複しています。テーブルの各行にも独自の UUID があります。
何か案は?私はこれに何日も取り組んできました。
編集:これが私が見つけた私の解決策です。
WITH RankedCTE AS(
SELECT ROW_NUMBER() OVER(PARTITION BY [File].Id ORDER BY CustomRecordsetId DESC) AS RowNumber, [File].*, FileType2Lexicon.Label as FileTypeLabel, [People].DefaultPhone, [People].InvertedName, CFV.Value as DOA
FROM FileType2Lexicon, SelectionCache, [People], [File]
INNER JOIN [CustomRecordSet]
ON [CustomRecordset].RecordId = [File].Id
INNER JOIN (SELECT Value, CustomFieldId, CustomRecordsetId FROM [CustomFieldValue]) CFV
ON [CustomRecordset].Id = CFV.CustomRecordsetId
INNER JOIN (SELECT CustomFieldId, Label FROM [CustomField2Lexicon]) CF2L
ON CF2L.CustomFieldId = CFV.CustomFieldId
WHERE [File].Id = SelectionCache.RecordId
AND SelectionCache.UUID = @UUID
AND SelectionCache.TableCode = @TableCode -- this is the code for File table
AND [File].Id <> 0
AND [File].FileTypeId = FileType2Lexicon.FileTypeId
AND FileType2Lexicon.LexiconId = @LexiconId
AND [File].ClientIdString = [People].ClientIdString
AND CFV.Value <> ''
AND (CF2L.Label = 'Date of Arrest')
SELECT *
FROM RankedCTE
WHERE RowNumber = 1