Я имею запрос SQL (MSSQLSERVER) где добавить столбцы в результирующем с помощью подзапросов:SQL: селективные подзапросов
SELECT P.name,
(select count(*) from cars C where C.type = 'sports') AS sportscars,
(select count(*) from cars C where C.type = 'family') AS familycars,
(select count(*) from cars C where C.type = 'business') AS businesscars
FROM people P
WHERE P.id = 1;
Запрос выше только от испытательной установки, это немного чепуха, но это достаточно хорошо, как я думаю. В запросе, на котором я фактически работаю, содержится множество сложных таблиц, которые только отвлекают от проблемы.
В приведенном выше примере каждая запись в таблице «люди» также содержит три дополнительных столбца: «хочетСпортспорт», «хочетФаммобиль» и «хочетБизнескар». Теперь то, что я хочу сделать, это сделать только подзапрос каждого дополнительного столбца, если соответствующее поле «хочет .....» в таблице people установлено в «true». Другими словами, я хочу только сделать первый подзабор, если для параметра P.wantsSportscar установлено значение true для этого конкретного человека. Второй и третий подвыборы должны работать аналогичным образом.
Так как этот запрос должен работать, так это то, что он показывает имя конкретного человека и количество моделей, доступных для типов автомобилей, которыми он хочет владеть. Возможно, стоит отметить, что мой окончательный набор результатов всегда будет содержать только одну запись, а именно одну конкретную пользователя.
Важно, что если человек не интересуется определенным типом автомобилей, то столбец для этого типа не будет включен в конечный набор результатов. Пример, чтобы это было ясно:
Если человек А хочет спортивный автомобиль и семейный автомобиль, в результате будут указаны столбцы «имя», «спортивные автомобили» и «семейные автомобили».
Если человек B хочет бизнес-машину, в результате будут указаны столбцы «имя» и «деловой автомобиль».
Я пытался использовать различные комбинации с операторами IF, CASE и EXISTS, но до сих пор я не смог получить синтаксически правильное решение. Кто-нибудь знает, возможно ли это? Обратите внимание, что запрос будет сохранен в хранимой процедуре.
Я думаю, это решило мою проблему для меня (см. Мой комментарий в ответ на ответ ChrisCM). Это решение позволит мне проверить значение разных столбцов в моем коде программирования и предпринять соответствующие действия. Это достаточно для меня. Благодарю. – Jerry