我需要运行一个查询,这个查询需要运行取决于我的excel文件中的数据。所以我应该创建一个ETL作业来将这个excel文件读取到临时表。用户可以在不同的日期更改Ques_P_id,因此我可以将其读取到临时表中。
我的临时表中有三列:
Report_name | Ques_P_ID | Ques_R_ID
AAA 7(could be 1~12) 132
BBB 8(could be 1~12) 032
我还有另一个sql脚本来生成基于Ques_P_ID的AAA报告。现在我想做的是,如果report_name = AAA并且Ques_P_ID = 9,那么就像这样运行查询:
select a.contr_id, a.ques_r_id, a.ques_P_id,
max(case when ques_d_id = 320 then ques_d_id else NULL end) as "8-320",
max(case when ques_d_id = 321 then ques_d_id else NULL end) as "8-321"
from PODS.v_questionnaire_results_master A
left join PODS.v_questionnaire_results_detail B on A.ques_r_id = B.ques_r_id
where 1=1
and a.update_date = '20160824'
and a.ques_p_id = 8
and a.contr_id <> ''
group by 1,2,3;
此查询将根据ques_p_id = 8
生成报告AAA报告contr_id ques_r_id ques_p_id 8-320 8-321
42315221 284806 8 320
44501488 282575 8 320
12817427 284460 8 320
11336635 284864 8 320
53040071 282691 8 321
50408289 284398 8 321
所以我想让ques_p_id变量可以读取临时表,如果ques_p_id = 1~9则在我的报表查询中使用1~9。所以我需要帮助在我的查询中声明这个变量。
如果我需要在临时表中识别ques_p_id,我应该这样做吗?
Declare @P int
Set @P = select (ques_p_ID) from temp_table_excel
select * From generate_AAA_report(@P);
还有这个脚本
max(CASE WHEN ques_d_id = 320 THEN 320 END),
max(CASE WHEN ques_d_id = 321 THEN 321 END)
如果P_id = 9,ques_d_id会将数字改为p_id, 它将改为WHEN ques_d_id = 520那么520结束.....等......
ques_p_id ques_m_id ques_d_id
8 1 320
8 1 321
8 1 322
8 1 323
8 2 324
9 1 445
9 1 446
9 1 447
9 2 448
9 2 449
9 2 450
由于
答案 0 :(得分:1)
如果我正确理解您的问题,那么最好的办法是将<script>
document.write("<base href='"+ window.location.protocol +'//' + window.location.host + "' >");
</script>
作为参数的SQL函数。对您的查询进行一些调整,如下所示:
ques_p_id
您可以为CREATE FUNCTION generate_AAA_report(p_id integer)
RETURNS TABLE(contr_id text, ques_r_id int, ques_p_id int, "8-320" int, "8-321" int) AS $$
SELECT a.contr_id, ques_r_id, p_id,
max(CASE WHEN ques_d_id = 320 THEN 320 END),
max(CASE WHEN ques_d_id = 321 THEN 321 END)
FROM PODS.v_questionnaire_results_master A
LEFT JOIN PODS.v_questionnaire_results_detail B USING (ques_r_id)
WHERE a.update_date = '20160824'
AND a.ques_p_id = p_id
AND a.contr_id <> ''
GROUP BY 1,2,3;
$$ LANGUAGE sql STRICT STABLE;
字段的函数添加第二个参数,以便您也可以将相同的函数用于其他日期。然后,您可能还应该从函数返回的表中添加一个字段,以确定它的用途。
然后,您可以生成如下报告:
update_date
报告当然只是查询的输出。如果要保存它,可以在SELECT * FROM generate_AAA_report(9);
命令中使用此查询来创建可以再次在Excel中打开的CSV文件,或者可以创建如下物理表:
COPY
请注意,该函数返回一个表,因此您应该将其用作行源(在查询的CREATE TABLE AAA_report_3 AS
SELECT * FROM generate_AAA_report(3);
子句中)。