Как получить результаты из запроса на основе имен столбцов, которые производит другой запрос - PullRequest
0 голосов
/ 20 марта 2019

Я не уверен, имеет ли это название большой смысл. Этот вопрос является более глубоким вопросом, касающимся вопроса, который я задавал ранее здесь

Наше программное обеспечение имеет журнал выполнения, и мне удалось записать этот сложный запрос. По сути, он вытягивает все возможные столбцы, но только несколько строк, необходимых для просмотра. затем, как программное обеспечение показывает только столбцы в представлении, которое пользователь сохранил. я хочу получить результат этого сложного запроса, чтобы показать только столбцы, соответствующие этому другому запросу:

SELECT *
FROM list_config
WHERE list_config.config_name = 'username'
  AND list_config.visible = 'Y';

мускулистый:

SELECT DISTINCT
       wo.id AS wo_id,
       wo.create_date,
       wo.priority,
       wo.activity_status_id,
       wo.short_description,
       wo.ops_note,
       CONVERT(varchar(1000), task.description) AS description,
       customer.customer_name,
       customer.account_manager,
       task.id AS task_id,
       wo.type_of,
       CASE WHEN wo.type_of = 'R' THEN 'Request' WHEN wo.type_of = 'P' THEN 'Project' END AS type_descr,
       wo.project_class_id,
       CASE WHEN (task.ovr_bill_status IS NOT NULL) THEN task.ovr_bill_status ELSE task.bill_status END AS bill_status,
       wo.customer_id,
       customer.support_who,
       customer.programmer,
       customer.proj_manager,
       customer.customer_class,
       customer.date_go_live,
       customer.within_golive_days,
       wo.resp_user_id,
       task.plan_hours AS plan_hours,
       task.actual_hours AS actual_hours,
       task.plan_start_date AS plan_start_date,
       task.plan_finish_date AS plan_finish_date,
       wo.release_id,
       customer.timezone,
       wo.update_date,
       wo.grouping_id,
       wo.grouping_id2,
       users.avail_status AS acct_manager_available
FROM task,
     work_order AS wo
     LEFT OUTER JOIN customer ON wo.customer_id = customer.code_id
                             AND customer.company_id = 'MCLD'
     LEFT OUTER JOIN users ON users.id = customer.account_manager
                          AND users.company_id = 'MCLD',
     assignment
WHERE task.company_id = 'MCLD'
  AND wo.status <> 'V'
  AND task.status <> 'C'
  AND assignment.is_complete = 'N'
  AND wo.customer_id NOT IN ('ZZZZ')
  AND task.work_order_id = wo.id
  AND wo.company_id = 'MCLD'
  AND task.id = assignment.task_id
  AND wo.id = assignment.work_order_id
  AND assignment.assigned_user_id IN ('SLSSVC')
  AND assignment.company_id = 'MCLD'
ORDER BY wo.create_date;

вот все столбцы в таблице list_config, сделанные путем выбора верхней 1000

SELECT TOP (1000) [company_id]
  ,[column_width]
  ,[config_name]
  ,[field_name]
  ,[grid_name]
  ,[sequence]
  ,[visible]
  ,[column_alignment]
  ,[config_owner]
  ,[sort_order]
  ,[grid_odd_row_color]
  ,[sort_sequence]
  ,[grid_even_row_color]

ОТ [list_config]

1 Ответ

0 голосов
/ 20 марта 2019

Посмотрев на столбцы для list_config в вашем другом вопросе, вы просто сможете присоединиться wo.customer_id к list_config.customer_id и добавить свои условия из меньшего оператора в основной:

SELECT DISTINCT
       wo.id AS wo_id,
       wo.create_date,
       wo.priority,
       wo.activity_status_id,
       wo.short_description,
       wo.ops_note,
       CONVERT(varchar(1000), task.description) AS description,
       customer.customer_name,
       customer.account_manager,
       task.id AS task_id,
       wo.type_of,
       CASE WHEN wo.type_of = 'R' THEN 'Request' WHEN wo.type_of = 'P' THEN 'Project' END AS type_descr,
       wo.project_class_id,
       CASE WHEN (task.ovr_bill_status IS NOT NULL) THEN task.ovr_bill_status ELSE task.bill_status END AS bill_status,
       wo.customer_id,
       customer.support_who,
       customer.programmer,
       customer.proj_manager,
       customer.customer_class,
       customer.date_go_live,
       customer.within_golive_days,
       wo.resp_user_id,
       task.plan_hours AS plan_hours,
       task.actual_hours AS actual_hours,
       task.plan_start_date AS plan_start_date,
       task.plan_finish_date AS plan_finish_date,
       wo.release_id,
       customer.timezone,
       wo.update_date,
       wo.grouping_id,
       wo.grouping_id2,
       users.avail_status AS acct_manager_available
FROM task,
     work_order AS wo
     LEFT OUTER JOIN customer ON wo.customer_id = customer.code_id
                             AND customer.company_id = 'MCLD'
     LEFT OUTER JOIN users ON users.id = customer.account_manager
                          AND users.company_id = 'MCLD',
     assignment

-- added join here
JOIN list_config AS lc
ON wo.customer_id = lc.customer_id

WHERE task.company_id = 'MCLD'
  AND wo.status <> 'V'
  AND task.status <> 'C'
  AND assignment.is_complete = 'N'
  AND wo.customer_id NOT IN ('ZZZZ')
  AND task.work_order_id = wo.id
  AND wo.company_id = 'MCLD'
  AND task.id = assignment.task_id
  AND wo.id = assignment.work_order_id
  AND assignment.assigned_user_id IN ('SLSSVC')
  AND assignment.company_id = 'MCLD'

-- added conditions from smaller statement here
  AND lc.config_name = 'username'
  AND lc.visible = 'Y'

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