Jacquesj4043 Ответов: 1

Подзапрос вернул более 1 значения


Using top1 and distinct as variables to make it unique.


Что я уже пробовал:

Используя топ1 и различные переменные, чтобы сделать его уникальным.

FranzBe

К сожалению, использование Top1 или distinct не решает, а скрывает проблему. Вам нужно будет проверять и анализировать Ваши подзапросы один за другим. Я не думаю, что удаленная помощь возможна без просмотра базовых данных. Удачи вам!

Richard Deeming

Удаление деталей вашего вопроса после того, как на него был дан ответ, - это чрезвычайно грубо!

1 Ответов

Рейтинг:
10

Maciej Los

Никто не может решить вашу проблему по нескольким причинам, таким как: у нас нет доступа к вашим данным, ваш sql-запрос нечитаем и поэтому уродлив! Извиняюсь...

На мой взгляд, вы используете слишком много подзапросов (SELECT заявления)! Видеть:

SELECT     last_name
                            FROM          dbo.l_person
                            WHERE      (person_key = cw.requested_by_person_key)) AS [Referring physician last name],
                          (SELECT     RTRIM(address_line1 + ' ' + ISNULL(address_line2, '')) AS Expr1
                            FROM          dbo.l_person_address
                            WHERE      (person_address_key = cw.requested_by_address_key)) AS [Referring address line 1 + 2  (location seen for selected accession)],
                          (SELECT     RTRIM(city + ', ' + ISNULL(state, '') + ' ' + ISNULL(zipcode, '')) AS Expr1
                            FROM          dbo.l_person_address AS l_person_address_3
                            WHERE      (person_address_key = cw.requested_by_address_key)) AS [Referrring city, state, zip],
                          (SELECT     phone_number
                            FROM          dbo.l_person_address AS l_person_address_2
                            WHERE      (person_address_key = cw.requested_by_address_key)) AS [Referring phone], ISNULL
                          ((SELECT     fax_number
                              FROM         dbo.l_person_address AS l_person_address_1
                              WHERE     (person_address_key = cw.requested_by_address_key)), '') AS [Referring fax], ISNULL
                          ((SELECT     dbo.c_GetNameFromUserID(performed_by_user_id) AS Expr1
                              FROM         dbo.c_study
                              WHERE     (study_key = cw.study_key)), '') AS [Technologist full name (first name, last name, suffix)], pr.description AS [Practice name], 
                      s.description AS [Location name], RTRIM(ISNULL(s.address_line1, '') + ' ' + ISNULL(s.address_line2, '')) AS [Location address line 1 + 2], ISNULL(s.city, '') 
                      + ', ' + ISNULL(s.state, '') + ' ' + ISNULL(s.zipcode, '') AS [Location address city, state, zip], s.main_phone_number AS LocationMainPhone, 
                      s.main_fax_number AS LocationMainfax, CASE WHEN
                          (SELECT     cf.contents
                            FROM          l_config_file cf
                            WHERE      cf.file_name = s.logo_file_name) IS NULL THEN
                          (SELECT     cf.contents
                            FROM          l_config_file cf, l_practice pr
                            WHERE      cf.file_name = pr.logo_file_name AND pr.practice_code = s.practice_code) ELSE
                          (SELECT


Вы видите, сколько их SELECT заявления есть? Я даже не могу их сосчитать!

Примечание: соединительные столы с помощью WHERE утверждение-это очень старая (устаревшая) практика! Вы должны использовать присоединяется[^]!

Я бы настоятельно рекомендовал переосмыслить ваш запрос и переписать его с нуля-шаг за шагом, добавив дополнительную информацию из другой таблицы через соединения.

Для получения более подробной информации, пожалуйста, смотрите:
Типы соединений[^]
Визуальное представление SQL-соединений[^]