Помощь с запросом SQL Server - PullRequest
0 голосов
/ 05 мая 2009

Извините * это то, что я должен был поставить

Мой запрос создает повторяющиеся записи для любой записи, которая имеет более 1 экземпляра (независимо от даты)

<asp:SqlDataSource ID="EastMonthlyHealthDS" runat="server" 
    ConnectionString="<%$ ConnectionStrings:SNA_TRTTestConnectionString %>" 
    SelectCommand="SELECT [SNA_Parent_Accounts].[Company], 
                   (SELECT [Monthly_HIP_Reports].[AccountHealth] from [Monthly_HIP_Reports] where ([Monthly_HIP_Reports].[YearMonth] = @ToDtRFC) AND ([SNA_Parent_Accounts].[CompID] = [Monthly_HIP_Reports].[CompID])) as [AccountHealth],
                   [SNA_Parent_Accounts].[CompID]
                   FROM [SNA_Parent_Accounts]
                   LEFT OUTER JOIN [Monthly_HIP_Reports] ON [Monthly_HIP_Reports].[CompID] = [SNA_Parent_Accounts].[CompID]
                   WHERE (([SNA_Parent_Accounts].[Classification] = 'Business') OR ([SNA_Parent_Accounts].[Classification] = 'Business Ihn')) AND ([SNA_Parent_Accounts].[Status] = 'active') AND ([SNA_Parent_Accounts].[Region] = 'east')
                   ORDER BY [SNA_Parent_Accounts].[Company]">
    <SelectParameters>
         <asp:ControlParameter ControlID="ddMonths" Name="ToDtRFC" PropertyName="Text" Type="String"  />
    </SelectParameters>
</asp:SqlDataSource>

Использование SELECT DISTINCT, кажется, исправляет проблему, но я не считаю это решением. В базе данных нет повторяющихся записей. Похоже, мой запрос создает дубликаты.

Запрос должен получить список компаний, которые соответствуют критериям, указанным в предложении where, но также получить статус Health для каждой компании в конкретном [YearMonth], если таковой имеется, для чего предназначен подзапрос. Если запись для этого YearMonth отсутствует, оставьте состояние работоспособности пустым.

но, как указано ранее ... если у вас есть запись, скажем, для 2009-03 для CompID 2 и запись для 2009-04 для CompID 2 .. Неважно, какой месяц вы выберете, будет указана эта компания 2-3 раз.

Ответы [ 4 ]

2 голосов
/ 05 мая 2009

Что вы имеете в виду, что это «создание дублирующих записей для любой записи, которая имеет более 1 экземпляра»? Кажется, что если существует более одного экземпляра, уже есть повторяющиеся записи?

Кроме того, я бы взглянул на эту часть кода:

SELECT count(*) FROM [SNA_Ticket_Detail] 
WHERE ([SNA_Ticket_Detail].[CompID] = [SNA_Parent_Accounts].[CompID]) 
   AND (CAST(CAST(YEAR([SNA_Ticket_Detail].[DtRFC]) AS VARCHAR(4)) 
      + '-0' + CAST(MONTH([SNA_Ticket_Detail].[DtRFC]) AS VARCHAR(2))
      AS VARCHAR(7)) = @ToDtRFC) 
   AND ([SNA_Ticket_Detail].[Reviewed] = '1') 
) as [TicketCount] 

Я вижу VARCHAR (4) + '-0' + VARCHAR (2), который для меня выглядит как до 8 символов, вставленный в VARCHAR (7). Вы теряете персонажа и дублируете его?

2 голосов
/ 05 мая 2009

Этот подзапрос:

(SELECT [Monthly_HIP_Reports].[AccountHealth] from [Monthly_HIP_Reports] where ([Monthly_HIP_Reports].[YearMonth] = @ToDtRFC)) as [AccountHealth],

не соотносится ни с одним из SNA_Parent_Accounts столбцов.

Это намеренно?

0 голосов
/ 05 мая 2009

Появляется, я нашел проблему в левом внешнем соединении

Я имел ВЛЕВО НАРУЖНОЕ СОЕДИНЕНИЕ [Monthly_HIP_Reports] ВКЛ [Monthly_HIP_Reports]. [CompID] = [SNA_Parent_Accounts]. [CompID]

, который захватывал все ежемесячные отчеты, где идентификаторы совпадали. Что мне нужно было

LEFT OUTER JOIN [Monthly_HIP_Reports] ON [Monthly_HIP_Reports]. [CompID] = [SNA_Parent_Accounts]. [CompID] И ([Monthly_HIP_Reports]. [YearMonth] = @ToDtRFC)

так что это ограничивало также и YearMonth.

Спасибо всем!

0 голосов
/ 05 мая 2009

Я думаю, вы должны добавить соединение между таблицей [Monthly_HIP_Reports] и таблицей [SNA_Parent_Accounts]. Я думаю, что именно здесь это дублируется, потому что я не знаю, для чего эти таблицы ... Если вы дадите больше описаний таблиц, я определенно могу сказать, в чем проблема ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...