我试图在我的Select语句where子句
中传递一个变量值onchange
在toad中弹出过滤窗口(我该如何避免)
DATE_DIM表如下所示
Declare v_WK varchar(20);
exec :v_WK :='Wk 6'
Select * from myTable Where Column = :v_Wk
事实表就像
UNIQUE_ID WEEK_NAME WEEK_BEGIN WEEK_END
1 Week 6, 2018 20180205 20180211
2 Week 5, 2018 20180129 20180204
3 Week 4, 2018 20180122 20180128
4 Week 3, 2018 20180115 20180121
这里我需要像
这样的输出ACCT_ID WEEK_NAME SALES
10001 20180205 10
10001 20180206 20
10001 20180207 10
10001 20180208 15
1002 20180129 100
1002 20180130 100
1002 20180131 100
1002 20180132 100
所以基本上我想循环每个ACCT_ID,如
ACCT_ID WEEK_NAME SALES
10001 Week 6, 2018 55
1002 Week 5, 2018 406
这就是我试过的
SELECT *
FROM Fact_Table
where Week_Name between (Select Week_Begin from DATE_DIM WHERE WEEk_NAME =: v_Wknm) /* Here I will have to loop Each Week_name for Each Acct_ID */
我在PLSQL中没有像MSSQL那样有点方便,对不起,如果这是一个简单的问题
答案 0 :(得分:1)
您可以使用VARIABLE
命令来定义绑定变量。另请注意,您应该使用VARCHAR2
。在Toad中,您可能必须执行“以脚本执行”或以sqlplus
运行才能使其正常工作。
VARIABLE v_WK VARCHAR2(20)
exec :v_WK :='Wk 6'
Select * from myTable Where Column_name = :v_Wk;
关于您的代码块,我们不像在TSQL中那样在Oracle中使用TABLE
变量。此外,您不能在PL / SQL范围内运行上述select语句和块(即在BEGIN..END
内)。如果你告诉我们你最终想要完成什么会更好,那么就可以提供有效的解决方案。
编辑:您不需要plsql来获取输出。使用这样的简单连接查询。
SELECT a.acct_id,
b.week_name,
COUNT(*)
FROM fact a
JOIN date_dim b
ON a.week_name BETWEEN b.week_begin AND b.week_end
GROUP BY a.acct_id,
b.week_name;