如何根据另一个查询产生的列名从查询中获取结果

时间:2019-03-20 15:51:39

标签: sql sql-server

我不确定该标题是否有意义。这个问题是与我先前问过的问题here

有关的更深入的问题

我们的软件有一个执行日志,我能够捕获此强大的查询。 基本上,它会拉出所有可能的列,但仅拉动需要查看的几行。然后介绍该软件如何仅在用户已保存的视图中显示列。我想从此查询中获取结果以仅显示与该其他查询匹配的列:

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]

FROM [list_config]

1 个答案:

答案 0 :(得分:0)

在另一个问题中查看了list_config的列之后,您应该只能够将wo.customer_idlist_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;